Skip to content

Commit 0c1796c

Browse files
committed
fix: newCollection generics
1 parent 75d7b47 commit 0c1796c

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/Illuminate/Database/Eloquent/Model.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,10 +1592,9 @@ protected function newBaseQueryBuilder()
15921592
* Create a new Eloquent Collection instance.
15931593
*
15941594
* @template TKey of array-key
1595-
* @template TModel of \Illuminate\Database\Eloquent\Model
15961595
*
1597-
* @param array<TKey, TModel> $models
1598-
* @return \Illuminate\Database\Eloquent\Collection<TKey, TModel>
1596+
* @param array<TKey, static> $models
1597+
* @return \Illuminate\Database\Eloquent\Collection<TKey, static>
15991598
*/
16001599
public function newCollection(array $models = [])
16011600
{

types/Database/Eloquent/Model.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
namespace Illuminate\Types\Model;
44

5+
use Illuminate\Database\Eloquent\Collection;
56
use Illuminate\Database\Eloquent\Model;
67
use User;
78

89
use function PHPStan\Testing\assertType;
910

10-
function test(User $user): void
11+
function test(User $user, Post $post, Comment $comment): void
1112
{
1213
assertType('UserFactory', User::factory(function ($attributes, $model) {
1314
assertType('array<string, mixed>', $attributes);
@@ -31,7 +32,8 @@ function test(User $user): void
3132
assertType('Illuminate\Database\Eloquent\Relations\MorphMany<Illuminate\Notifications\DatabaseNotification, User>', $user->notifications());
3233

3334
assertType('Illuminate\Database\Eloquent\Collection<int, User>', $user->newCollection([new User()]));
34-
assertType('Illuminate\Database\Eloquent\Collection<string, Illuminate\Types\Model\Post>', $user->newCollection(['foo' => new Post()]));
35+
assertType('Illuminate\Database\Eloquent\Collection<string, Illuminate\Types\Model\Post>', $post->newCollection(['foo' => new Post()]));
36+
assertType('Illuminate\Types\Model\Comments', $comment->newCollection([new Comment()]));
3537

3638
assertType('bool', $user->restore());
3739
assertType('User', $user->restoreOrCreate());
@@ -41,3 +43,16 @@ function test(User $user): void
4143
class Post extends Model
4244
{
4345
}
46+
47+
final class Comment extends Model
48+
{
49+
public function newCollection(array $models = []): Comments
50+
{
51+
return new Comments($models);
52+
}
53+
}
54+
55+
/** @extends Collection<array-key, Comment> */
56+
final class Comments extends Collection
57+
{
58+
}

0 commit comments

Comments
 (0)