Skip to content

Commit 53193a2

Browse files
authored
fix: PHPDoc for loading nested relations (#52762)
1 parent 6a547e4 commit 53193a2

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

src/Illuminate/Database/Eloquent/Builder.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -1537,7 +1537,7 @@ protected function createNestedWhere($whereSlice, $boolean = 'and')
15371537
/**
15381538
* Set the relationships that should be eager loaded.
15391539
*
1540-
* @param array<array-key, (\Closure(\Illuminate\Database\Eloquent\Relations\Relation<*,*,*>): mixed)|string>|string $relations
1540+
* @param array<array-key, array|(\Closure(\Illuminate\Database\Eloquent\Relations\Relation<*,*,*>): mixed)|string>|string $relations
15411541
* @param (\Closure(\Illuminate\Database\Eloquent\Relations\Relation<*,*,*>): mixed)|string|null $callback
15421542
* @return $this
15431543
*/
@@ -1572,7 +1572,7 @@ public function without($relations)
15721572
/**
15731573
* Set the relationships that should be eager loaded while removing any previously added eager loading specifications.
15741574
*
1575-
* @param array<array-key, (\Closure(\Illuminate\Database\Eloquent\Relations\Relation<*,*,*>): mixed)|string>|string $relations
1575+
* @param array<array-key, array|(\Closure(\Illuminate\Database\Eloquent\Relations\Relation<*,*,*>): mixed)|string>|string $relations
15761576
* @return $this
15771577
*/
15781578
public function withOnly($relations)

src/Illuminate/Database/Eloquent/Collection.php

+11-11
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function findOrFail($key)
8484
/**
8585
* Load a set of relationships onto the collection.
8686
*
87-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
87+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
8888
* @return $this
8989
*/
9090
public function load($relations)
@@ -105,7 +105,7 @@ public function load($relations)
105105
/**
106106
* Load a set of aggregations over relationship's column onto the collection.
107107
*
108-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
108+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
109109
* @param string $column
110110
* @param string|null $function
111111
* @return $this
@@ -142,7 +142,7 @@ public function loadAggregate($relations, $column, $function = null)
142142
/**
143143
* Load a set of relationship counts onto the collection.
144144
*
145-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
145+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
146146
* @return $this
147147
*/
148148
public function loadCount($relations)
@@ -153,7 +153,7 @@ public function loadCount($relations)
153153
/**
154154
* Load a set of relationship's max column values onto the collection.
155155
*
156-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
156+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
157157
* @param string $column
158158
* @return $this
159159
*/
@@ -165,7 +165,7 @@ public function loadMax($relations, $column)
165165
/**
166166
* Load a set of relationship's min column values onto the collection.
167167
*
168-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
168+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
169169
* @param string $column
170170
* @return $this
171171
*/
@@ -177,7 +177,7 @@ public function loadMin($relations, $column)
177177
/**
178178
* Load a set of relationship's column summations onto the collection.
179179
*
180-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
180+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
181181
* @param string $column
182182
* @return $this
183183
*/
@@ -189,7 +189,7 @@ public function loadSum($relations, $column)
189189
/**
190190
* Load a set of relationship's average column values onto the collection.
191191
*
192-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
192+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
193193
* @param string $column
194194
* @return $this
195195
*/
@@ -201,7 +201,7 @@ public function loadAvg($relations, $column)
201201
/**
202202
* Load a set of related existences onto the collection.
203203
*
204-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
204+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
205205
* @return $this
206206
*/
207207
public function loadExists($relations)
@@ -212,7 +212,7 @@ public function loadExists($relations)
212212
/**
213213
* Load a set of relationships onto the collection if they are not already eager loaded.
214214
*
215-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
215+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string>|string $relations
216216
* @return $this
217217
*/
218218
public function loadMissing($relations)
@@ -284,7 +284,7 @@ protected function loadMissingRelation(self $models, array $path)
284284
* Load a set of relationships onto the mixed relationship collection.
285285
*
286286
* @param string $relation
287-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string> $relations
287+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string> $relations
288288
* @return $this
289289
*/
290290
public function loadMorph($relation, $relations)
@@ -301,7 +301,7 @@ public function loadMorph($relation, $relations)
301301
* Load a set of relationship counts onto the mixed relationship collection.
302302
*
303303
* @param string $relation
304-
* @param array<array-key, (callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string> $relations
304+
* @param array<array-key, array|(callable(\Illuminate\Database\Eloquent\Relations\Relation<*, *, *>): mixed)|string> $relations
305305
* @return $this
306306
*/
307307
public function loadMorphCount($relation, $relations)

types/Database/Eloquent/Builder.php

+2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ function test(
2424
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->orWhere('name', 'John'));
2525
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->whereNot('status', 'active'));
2626
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->with('relation'));
27+
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->with(['relation' => ['foo' => fn ($q) => $q]]));
2728
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->with(['relation' => function ($query) {
2829
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
2930
}]));
3031
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->without('relation'));
3132
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->withOnly(['relation']));
33+
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->withOnly(['relation' => ['foo' => fn ($q) => $q]]));
3234
assertType('Illuminate\Database\Eloquent\Builder<User>', $query->withOnly(['relation' => function ($query) {
3335
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
3436
}]));

types/Database/Eloquent/Collection.php

+11
Original file line numberDiff line numberDiff line change
@@ -10,65 +10,76 @@
1010

1111
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->load('string'));
1212
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->load(['string']));
13+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->load(['string' => ['foo' => fn ($q) => $q]]));
1314
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->load(['string' => function ($query) {
1415
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
1516
}]));
1617

1718
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAggregate('string', 'string'));
1819
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAggregate(['string'], 'string'));
20+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAggregate(['string' => ['foo' => fn ($q) => $q]], 'string'));
1921
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAggregate(['string'], 'string', 'string'));
2022
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAggregate(['string' => function ($query) {
2123
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
2224
}], 'string', 'string'));
2325

2426
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadCount('string'));
2527
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadCount(['string']));
28+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadCount(['string' => ['foo' => fn ($q) => $q]]));
2629
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadCount(['string' => function ($query) {
2730
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
2831
}]));
2932

3033
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMax('string', 'string'));
3134
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMax(['string'], 'string'));
35+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMax(['string' => ['foo' => fn ($q) => $q]], 'string'));
3236
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMax(['string' => function ($query) {
3337
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
3438
}], 'string'));
3539

3640
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMin('string', 'string'));
3741
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMin(['string'], 'string'));
42+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMin(['string' => ['foo' => fn ($q) => $q]], 'string'));
3843
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMin(['string' => function ($query) {
3944
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
4045
}], 'string'));
4146

4247
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadSum('string', 'string'));
4348
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadSum(['string'], 'string'));
49+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadSum(['string' => ['foo' => fn ($q) => $q]], 'string'));
4450
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadSum(['string' => function ($query) {
4551
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
4652
}], 'string'));
4753

4854
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAvg('string', 'string'));
4955
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAvg(['string'], 'string'));
56+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAvg(['string' => ['foo' => fn ($q) => $q]], 'string'));
5057
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadAvg(['string' => function ($query) {
5158
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
5259
}], 'string'));
5360

5461
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadExists('string'));
5562
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadExists(['string']));
63+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadExists(['string' => ['foo' => fn ($q) => $q]]));
5664
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadExists(['string' => function ($query) {
5765
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
5866
}]));
5967

6068
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMissing('string'));
6169
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMissing(['string']));
70+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMissing(['string' => ['foo' => fn ($q) => $q]]));
6271
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMissing(['string' => function ($query) {
6372
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
6473
}]));
6574

6675
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorph('string', ['string']));
76+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorph('string', ['string' => ['foo' => fn ($q) => $q]]));
6777
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorph('string', ['string' => function ($query) {
6878
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
6979
}]));
7080

7181
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorphCount('string', ['string']));
82+
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorphCount('string', ['string' => ['foo' => fn ($q) => $q]]));
7283
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $collection->loadMorphCount('string', ['string' => function ($query) {
7384
// assertType('Illuminate\Database\Eloquent\Relations\Relation<*,*,*>', $query);
7485
}]));

0 commit comments

Comments
 (0)