Skip to content

Commit

Permalink
#16478 : review & fix
Browse files Browse the repository at this point in the history
  • Loading branch information
lgtaxn committed Apr 4, 2024
1 parent 10b8968 commit 444500f
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 35 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)
------------------

Expand Down
4 changes: 2 additions & 2 deletions src/Eloquent/DefaultOrderScope.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.');
}
}
}
14 changes: 3 additions & 11 deletions src/Eloquent/JoinRelBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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();
Expand Down
31 changes: 18 additions & 13 deletions src/Eloquent/Mixins/JoinRelMixin.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ 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
* @return Builder
*/
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)) {
Expand All @@ -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);
}

/**
Expand Down
19 changes: 11 additions & 8 deletions src/Eloquent/Mixins/WhereHasInMixin.php
Original file line number Diff line number Diff line change
Expand Up @@ -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}());

Expand Down Expand Up @@ -69,34 +69,37 @@ 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');
}

/**
* Like "whereDoesntHave()" but using "in" clause instead of "exists".
*
* @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);
}

/**
* Like "orWhereDoesntHave()" but using "in" clause instead of "exists".
*
* @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);
}
}
2 changes: 1 addition & 1 deletion src/Eloquent/SoftDeletes.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down

0 comments on commit 444500f

Please sign in to comment.