Skip to content

Commit 6c05cb0

Browse files
committed
Hint query builder closures
1 parent f402d3f commit 6c05cb0

File tree

8 files changed

+94
-90
lines changed

8 files changed

+94
-90
lines changed

src/Illuminate/Database/Concerns/BuildsQueries.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function chunk($count, callable $callback)
6565
/**
6666
* Run a map over each item while chunking.
6767
*
68-
* @param callable $callback
68+
* @param callable(object): mixed $callback
6969
* @param int $count
7070
* @return \Illuminate\Support\Collection
7171
*/
@@ -85,7 +85,7 @@ public function chunkMap(callable $callback, $count = 1000)
8585
/**
8686
* Execute a callback over each item while chunking.
8787
*
88-
* @param callable $callback
88+
* @param callable(object, int): bool $callback
8989
* @param int $count
9090
* @return bool
9191
*
@@ -159,7 +159,7 @@ public function chunkById($count, callable $callback, $column = null, $alias = n
159159
/**
160160
* Execute a callback over each item while chunking by ID.
161161
*
162-
* @param callable $callback
162+
* @param callable(object, int): bool $callback
163163
* @param int $count
164164
* @param string|null $column
165165
* @param string|null $alias

src/Illuminate/Database/Eloquent/Builder.php

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class Builder implements BuilderContract
7373
/**
7474
* A replacement for the typical delete function.
7575
*
76-
* @var \Closure
76+
* @var \Closure(self): mixed
7777
*/
7878
protected $onDelete;
7979

@@ -125,7 +125,7 @@ class Builder implements BuilderContract
125125
/**
126126
* Applied global scopes.
127127
*
128-
* @var array
128+
* @var array<(\Closure(self): void)>
129129
*/
130130
protected $scopes = [];
131131

@@ -162,7 +162,7 @@ public function make(array $attributes = [])
162162
* Register a new global scope.
163163
*
164164
* @param string $identifier
165-
* @param \Illuminate\Database\Eloquent\Scope|\Closure $scope
165+
* @param \Illuminate\Database\Eloquent\Scope|(\Closure(self): void) $scope
166166
* @return $this
167167
*/
168168
public function withGlobalScope($identifier, $scope)
@@ -285,7 +285,7 @@ public function whereKeyNot($id)
285285
/**
286286
* Add a basic where clause to the query.
287287
*
288-
* @param \Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column
288+
* @param (\Closure(self): void)|string|array|\Illuminate\Contracts\Database\Query\Expression $column
289289
* @param mixed $operator
290290
* @param mixed $value
291291
* @param string $boolean
@@ -307,7 +307,7 @@ public function where($column, $operator = null, $value = null, $boolean = 'and'
307307
/**
308308
* Add a basic where clause to the query, and return the first result.
309309
*
310-
* @param \Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column
310+
* @param (\Closure(self): void)|string|array|\Illuminate\Contracts\Database\Query\Expression $column
311311
* @param mixed $operator
312312
* @param mixed $value
313313
* @param string $boolean
@@ -321,7 +321,7 @@ public function firstWhere($column, $operator = null, $value = null, $boolean =
321321
/**
322322
* Add an "or where" clause to the query.
323323
*
324-
* @param \Closure|array|string|\Illuminate\Contracts\Database\Query\Expression $column
324+
* @param (\Closure(self): void)|array|string|\Illuminate\Contracts\Database\Query\Expression $column
325325
* @param mixed $operator
326326
* @param mixed $value
327327
* @return $this
@@ -338,7 +338,7 @@ public function orWhere($column, $operator = null, $value = null)
338338
/**
339339
* Add a basic "where not" clause to the query.
340340
*
341-
* @param \Closure|string|array|\Illuminate\Contracts\Database\Query\Expression $column
341+
* @param (\Closure(self): void)|string|array|\Illuminate\Contracts\Database\Query\Expression $column
342342
* @param mixed $operator
343343
* @param mixed $value
344344
* @param string $boolean
@@ -352,7 +352,7 @@ public function whereNot($column, $operator = null, $value = null, $boolean = 'a
352352
/**
353353
* Add an "or where not" clause to the query.
354354
*
355-
* @param \Closure|array|string|\Illuminate\Contracts\Database\Query\Expression $column
355+
* @param (\Closure(self): void)|array|string|\Illuminate\Contracts\Database\Query\Expression $column
356356
* @param mixed $operator
357357
* @param mixed $value
358358
* @return $this
@@ -519,8 +519,8 @@ public function findOrNew($id, $columns = ['*'])
519519
* Find a model by its primary key or call a callback.
520520
*
521521
* @param mixed $id
522-
* @param \Closure|array|string $columns
523-
* @param \Closure|null $callback
522+
* @param (\Closure(): mixed)|array|string $columns
523+
* @param (\Closure(): mixed)|null $callback
524524
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|static[]|static|mixed
525525
*/
526526
public function findOr($id, $columns = ['*'], Closure $callback = null)
@@ -620,8 +620,8 @@ public function firstOrFail($columns = ['*'])
620620
/**
621621
* Execute the query and get the first result or call a callback.
622622
*
623-
* @param \Closure|array|string $columns
624-
* @param \Closure|null $callback
623+
* @param (\Closure(): mixed)|array|string $columns
624+
* @param (\Closure(): mixed)|null $callback
625625
* @return \Illuminate\Database\Eloquent\Model|static|mixed
626626
*/
627627
public function firstOr($columns = ['*'], Closure $callback = null)
@@ -761,7 +761,7 @@ public function eagerLoadRelations(array $models)
761761
*
762762
* @param array $models
763763
* @param string $name
764-
* @param \Closure $constraints
764+
* @param \Closure(\Illuminate\Database\Eloquent\Relations\Relation): void $constraints
765765
* @return array
766766
*/
767767
protected function eagerLoadRelation(array $models, $name, Closure $constraints)
@@ -903,11 +903,10 @@ public function pluck($column, $key = null)
903903
/**
904904
* Paginate the given query.
905905
*
906-
* @param int|null|\Closure $perPage
906+
* @param int|null|(\Closure(int): int|null) $perPage
907907
* @param array|string $columns
908908
* @param string $pageName
909909
* @param int|null $page
910-
* @param \Closure|int|null $total
911910
* @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
912911
*
913912
* @throws \InvalidArgumentException
@@ -1284,7 +1283,7 @@ public function forceDelete()
12841283
/**
12851284
* Register a replacement for the default delete function.
12861285
*
1287-
* @param \Closure $callback
1286+
* @param \Closure(self): mixed $callback
12881287
* @return void
12891288
*/
12901289
public function onDelete(Closure $callback)
@@ -1373,7 +1372,7 @@ public function applyScopes()
13731372
/**
13741373
* Apply the given scope on the current builder instance.
13751374
*
1376-
* @param callable $scope
1375+
* @param (callable(mixed $parameters...): mixed) $scope
13771376
* @param array $parameters
13781377
* @return mixed
13791378
*/
@@ -1480,7 +1479,7 @@ protected function createNestedWhere($whereSlice, $boolean = 'and')
14801479
* Set the relationships that should be eager loaded.
14811480
*
14821481
* @param string|array $relations
1483-
* @param string|\Closure|null $callback
1482+
* @param string|(\Closure(self): self|null)|null $callback
14841483
* @return $this
14851484
*/
14861485
public function with($relations, $callback = null)
@@ -1619,8 +1618,8 @@ protected function prepareNestedWithRelationships($relations, $prefix = '')
16191618
/**
16201619
* Combine an array of constraints into a single constraint.
16211620
*
1622-
* @param array $constraints
1623-
* @return \Closure
1621+
* @param array<(\Closure(self): self|null)> $constraints
1622+
* @return \Closure(self): self
16241623
*/
16251624
protected function combineConstraints(array $constraints)
16261625
{

src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -755,8 +755,8 @@ public function findOrFail($id, $columns = ['*'])
755755
* Find a related model by its primary key or call a callback.
756756
*
757757
* @param mixed $id
758-
* @param \Closure|array $columns
759-
* @param \Closure|null $callback
758+
* @param (\Closure(): mixed)|array $columns
759+
* @param (\Closure(): mixed)|null $callback
760760
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|mixed
761761
*/
762762
public function findOr($id, $columns = ['*'], Closure $callback = null)
@@ -785,7 +785,7 @@ public function findOr($id, $columns = ['*'], Closure $callback = null)
785785
/**
786786
* Add a basic where clause to the query, and return the first result.
787787
*
788-
* @param \Closure|string|array $column
788+
* @param (\Closure(\Illuminate\Database\Eloquent\Builder): void)|string|array $column
789789
* @param mixed $operator
790790
* @param mixed $value
791791
* @param string $boolean
@@ -829,8 +829,8 @@ public function firstOrFail($columns = ['*'])
829829
/**
830830
* Execute the query and get the first result or call a callback.
831831
*
832-
* @param \Closure|array $columns
833-
* @param \Closure|null $callback
832+
* @param (\Closure(): mixed)|array $columns
833+
* @param (\Closure(): mixed)|null $callback
834834
* @return \Illuminate\Database\Eloquent\Model|static|mixed
835835
*/
836836
public function firstOr($columns = ['*'], Closure $callback = null)
@@ -1021,7 +1021,7 @@ public function chunkById($count, callable $callback, $column = null, $alias = n
10211021
/**
10221022
* Execute a callback over each item while chunking.
10231023
*
1024-
* @param callable $callback
1024+
* @param callable(object, int): bool $callback
10251025
* @param int $count
10261026
* @return bool
10271027
*/

src/Illuminate/Database/Eloquent/Relations/Concerns/SupportsDefaultModels.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ trait SupportsDefaultModels
1111
*
1212
* Alternatively, may be a Closure or array.
1313
*
14-
* @var \Closure|array|bool
14+
* @var (\Closure(\Illuminate\Database\Eloquent\Model, \Illuminate\Database\Eloquent\Model): \Illuminate\Database\Eloquent\Model|null)|array|bool
1515
*/
1616
protected $withDefault;
1717

@@ -26,7 +26,7 @@ abstract protected function newRelatedInstanceFor(Model $parent);
2626
/**
2727
* Return a new model instance in case the relationship does not exist.
2828
*
29-
* @param \Closure|array|bool $callback
29+
* @param (\Closure(\Illuminate\Database\Eloquent\Model, \Illuminate\Database\Eloquent\Model): \Illuminate\Database\Eloquent\Model|null)|array|bool $callback
3030
* @return $this
3131
*/
3232
public function withDefault($callback = true)

src/Illuminate/Database/Eloquent/Relations/HasManyThrough.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public function updateOrCreate(array $attributes, array $values = [])
315315
/**
316316
* Add a basic where clause to the query, and return the first result.
317317
*
318-
* @param \Closure|string|array $column
318+
* @param (\Closure(\Illuminate\Database\Eloquent\Builder): void)|string|array $column
319319
* @param mixed $operator
320320
* @param mixed $value
321321
* @param string $boolean
@@ -359,8 +359,8 @@ public function firstOrFail($columns = ['*'])
359359
/**
360360
* Execute the query and get the first result or call a callback.
361361
*
362-
* @param \Closure|array $columns
363-
* @param \Closure|null $callback
362+
* @param (\Closure(): mixed)|array $columns
363+
* @param (\Closure(): mixed)|null $callback
364364
* @return \Illuminate\Database\Eloquent\Model|static|mixed
365365
*/
366366
public function firstOr($columns = ['*'], Closure $callback = null)
@@ -446,8 +446,8 @@ public function findOrFail($id, $columns = ['*'])
446446
* Find a related model by its primary key or call a callback.
447447
*
448448
* @param mixed $id
449-
* @param \Closure|array $columns
450-
* @param \Closure|null $callback
449+
* @param (\Closure(): mixed)|array $columns
450+
* @param (\Closure(): mixed)|null $callback
451451
* @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|mixed
452452
*/
453453
public function findOr($id, $columns = ['*'], Closure $callback = null)
@@ -603,7 +603,7 @@ public function chunkById($count, callable $callback, $column = null, $alias = n
603603
/**
604604
* Execute a callback over each item while chunking by ID.
605605
*
606-
* @param callable $callback
606+
* @param callable(object, int): bool $callback
607607
* @param int $count
608608
* @param string|null $column
609609
* @param string|null $alias
@@ -631,7 +631,7 @@ public function cursor()
631631
/**
632632
* Execute a callback over each item while chunking.
633633
*
634-
* @param callable $callback
634+
* @param callable(object, int): bool $callback
635635
* @param int $count
636636
* @return bool
637637
*/

src/Illuminate/Database/Eloquent/Relations/Relation.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ public function __construct(Builder $query, Model $parent)
9494
/**
9595
* Run a callback with constraints disabled on the relation.
9696
*
97-
* @param \Closure $callback
98-
* @return mixed
97+
* @template TValue
98+
*
99+
* @param \Closure(): TValue $callback
100+
* @return TValue
99101
*/
100102
public static function noConstraints(Closure $callback)
101103
{

0 commit comments

Comments
 (0)