diff --git a/CHANGELOG.md b/CHANGELOG.md index c0bb07b..7e2914d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +4.0.2 (2024-04-04) +------------------ + +- Fix exception always thrown on DefaultOrderScope +- Fix parameters type hinting on joinRel macro + 4.0.1 (2024-04-01) ------------------ diff --git a/src/Eloquent/DefaultOrderScope.php b/src/Eloquent/DefaultOrderScope.php index 27e10f4..452d468 100644 --- a/src/Eloquent/DefaultOrderScope.php +++ b/src/Eloquent/DefaultOrderScope.php @@ -39,9 +39,9 @@ public function apply(Builder $builder, Model $model): void $builder->orderByNatural($model->getTable().'.'.$column, 'desc'); } elseif ($option === 'raw') { $builder->orderByRaw($column); + } else { + throw new DefaultOrderException('Option "'.$option.'" not supported.'); } - - throw new DefaultOrderException('Option "'.$option.'" not supported.'); } } } diff --git a/src/Eloquent/JoinRelBuilder.php b/src/Eloquent/JoinRelBuilder.php index b4fe2e2..15bf4e7 100644 --- a/src/Eloquent/JoinRelBuilder.php +++ b/src/Eloquent/JoinRelBuilder.php @@ -32,13 +32,9 @@ public function __construct(Model $model) /** * Apply a join clause on a query using an Eloquent relationship. * - * @param string $relationName - * @param string|null $alias - * @param Closure|null $callback - * @param string $type - * @param bool $withTrashed + * @param string|Closure|null $alias */ - public function apply(Builder $query, $relationName, $alias = null, $callback = null, $type = 'inner', $withTrashed = false): void + public function apply(Builder $query, string $relationName, $alias = null, ?Closure $callback = null, string $type = 'inner', bool $withTrashed = false): void { if (str_contains($relationName, '.')) { [$parentAlias, $relationName] = explode('.', $relationName); @@ -83,12 +79,8 @@ public function apply(Builder $query, $relationName, $alias = null, $callback = * Add condition to join clause using Eloquent relationship. * * Supports: HasOne, HasMany, MorphOne, MorphMany, BelongsTo - * - * @param Closure|null $callback - * @param bool $withTrashed - * @return Closure */ - protected function addCondition(JoinClause $join, Relation $relation, $callback, $withTrashed) + protected function addCondition(JoinClause $join, Relation $relation, ?Closure $callback, bool $withTrashed): void { if ($relation instanceof HasOneOrMany) { $relationKey1 = $relation->getParent()->getTable().'.'.$relation->getLocalKeyName(); diff --git a/src/Eloquent/Mixins/JoinRelMixin.php b/src/Eloquent/Mixins/JoinRelMixin.php index 08bb58c..5e6ab21 100644 --- a/src/Eloquent/Mixins/JoinRelMixin.php +++ b/src/Eloquent/Mixins/JoinRelMixin.php @@ -29,7 +29,7 @@ public function alias() * Make join using Eloquent relationship. * * @param string $relationName - * @param string|null $alias + * @param string|Closure|null $alias * @param Closure|null $callback * @param string $type * @param bool $withTrashed @@ -37,7 +37,7 @@ public function alias() */ public function joinRel() { - return function (string $relationName, ?string $alias = null, ?string $callback = null, string $type = 'inner', bool $withTrashed = false): Builder { + return function (string $relationName, $alias = null, ?Closure $callback = null, string $type = 'inner', bool $withTrashed = false): Builder { global $_joinRelBuildersWeakMap; if (! isset($_joinRelBuildersWeakMap)) { @@ -58,65 +58,70 @@ public function joinRel() * Make join using Eloquent relationship and including trashed records. * * @param string $relationName - * @param string|null $alias + * @param string|Closure|null $alias * @param Closure|null $callback * @return Builder */ public function joinRelWithTrashed() { - return fn ($relationName, $alias = null, $callback = null) => $this->joinRel($relationName, $alias, $callback, 'inner', true); + return fn (string $relationName, $alias = null, ?Closure $callback = null) + => $this->joinRel($relationName, $alias, $callback, 'inner', true); } /** * Make left join using Eloquent relationship. * * @param string $relationName - * @param string|null $alias + * @param string|Closure|null $alias * @param Closure|null $callback * @return Builder */ public function leftJoinRel() { - return fn ($relationName, $alias = null, $callback = null) => $this->joinRel($relationName, $alias, $callback, 'left'); + return fn (string $relationName, $alias = null, ?Closure $callback = null) + => $this->joinRel($relationName, $alias, $callback, 'left'); } /** * Make left join using Eloquent relationship and including trashed records. * * @param string $relationName - * @param string|null $alias + * @param string|Closure|null $alias * @param Closure|null $callback * @return Builder */ public function leftJoinRelWithTrashed() { - return fn ($relationName, $alias = null, $callback = null) => $this->joinRel($relationName, $alias, $callback, 'left', true); + return fn (string $relationName, $alias = null, ?Closure $callback = null) + => $this->joinRel($relationName, $alias, $callback, 'left', true); } /** * Make right join using Eloquent relationship. * * @param string $relationName - * @param string|null $alias + * @param string|Closure|null $alias * @param Closure|null $callback * @return Builder */ public function rightJoinRel() { - return fn ($relationName, $alias = null, $callback = null) => $this->joinRel($relationName, $alias, $callback, 'right'); + return fn (string $relationName, $alias = null, ?Closure $callback = null) + => $this->joinRel($relationName, $alias, $callback, 'right'); } /** * Make right join using Eloquent relationship and including trashed records. * * @param string $relationName - * @param string $alias - * @param Closure|null $wheres + * @param string|Closure|null $alias + * @param Closure|null $callback * @return Builder */ public function rightJoinRelWithTrashed() { - return fn ($relationName, $alias = null, $callback = null) => $this->joinRel($relationName, $alias, $callback, 'right', true); + return fn (string $relationName, $alias = null, ?Closure $callback = null) + => $this->joinRel($relationName, $alias, $callback, 'right', true); } /** diff --git a/src/Eloquent/Mixins/WhereHasInMixin.php b/src/Eloquent/Mixins/WhereHasInMixin.php index e5ab267..292e52d 100644 --- a/src/Eloquent/Mixins/WhereHasInMixin.php +++ b/src/Eloquent/Mixins/WhereHasInMixin.php @@ -21,11 +21,11 @@ class WhereHasInMixin * @param Closure|null $callback * @param string $boolean * @param bool $not - * @return void + * @return Builder */ public function whereHasIn() { - return function ($relationName, ?Closure $callback = null, $boolean = 'and', $not = false): Builder { + return function (string $relationName, ?Closure $callback = null, string $boolean = 'and', bool $not = false): Builder { $relation = Relation::noConstraints(fn () => $this->model->{$relationName}()); @@ -69,11 +69,12 @@ public function whereHasIn() * * @param string $relationName * @param Closure|null $callback - * @return void + * @return Builder */ public function orWhereHasIn() { - return fn ($relationName, ?Closure $callback = null) => $this->whereHasIn($relationName, $callback, 'or'); + return fn (string $relationName, ?Closure $callback = null) + => $this->whereHasIn($relationName, $callback, 'or'); } /** @@ -81,11 +82,12 @@ public function orWhereHasIn() * * @param string $relationName * @param Closure|null $callback - * @return void + * @return Builder */ public function whereDoesntHaveIn() { - return fn ($relationName, ?Closure $callback = null) => $this->whereHasIn($relationName, $callback, 'and', true); + return fn (string $relationName, ?Closure $callback = null) + => $this->whereHasIn($relationName, $callback, 'and', true); } /** @@ -93,10 +95,11 @@ public function whereDoesntHaveIn() * * @param string $relationName * @param Closure|null $callback - * @return void + * @return Builder */ public function orWhereDoesntHaveIn() { - return fn ($relationName, ?Closure $callback = null) => $this->whereHasIn($relationName, $callback, 'or', true); + return fn (string $relationName, ?Closure $callback = null) + => $this->whereHasIn($relationName, $callback, 'or', true); } } diff --git a/src/Eloquent/SoftDeletes.php b/src/Eloquent/SoftDeletes.php index d381358..f9eb547 100644 --- a/src/Eloquent/SoftDeletes.php +++ b/src/Eloquent/SoftDeletes.php @@ -13,7 +13,7 @@ trait SoftDeletes * Like "withoutTrashed()" but with the ability of excepting some records * (these records will be retrieved even if they are trashed). * - * @param int|array[int] $exceptId + * @param int|array[int]|null $exceptId */ public function scopeWithoutTrashedExcept(Builder $query, $exceptId = null): void {