File tree Expand file tree Collapse file tree 7 files changed +84
-3
lines changed Expand file tree Collapse file tree 7 files changed +84
-3
lines changed Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ public function getFiles(): array
17
17
{
18
18
return [
19
19
__DIR__ . '/../../stubs/database/eloquent/builder.stub ' ,
20
+ __DIR__ . '/../../stubs/database/eloquent/model.stub ' ,
20
21
];
21
22
}
22
23
}
Original file line number Diff line number Diff line change 2
2
3
3
namespace Illuminate\Database\Eloquent;
4
4
5
+ /**
6
+ * @template TModel of \Illuminate\Database\Eloquent\Model
7
+ */
5
8
class Builder
6
9
{
7
10
/**
8
11
* @param string[]|string $columns
9
- * @return \Illuminate\Database\Eloquent\Model |null
12
+ * @return TModel |null
10
13
*/
11
14
public function first($columns = ['*']);
12
15
}
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Illuminate\Database\Eloquent;
4
+
5
+ class Model
6
+ {
7
+ /**
8
+ * @param \Illuminate\Database\Query\Builder $query
9
+ * @return \Illuminate\Database\Eloquent\Builder<static>
10
+ */
11
+ public function newEloquentBuilder($query);
12
+
13
+ /**
14
+ * @return \Illuminate\Database\Eloquent\Builder<static>
15
+ */
16
+ public static function query();
17
+ }
Original file line number Diff line number Diff line change
1
+ <?php declare (strict_types = 1 );
2
+
3
+ namespace Tests \Types \Database \Eloquent ;
4
+
5
+ use PHPStan \Testing \TypeInferenceTestCase ;
6
+ use PHPUnit \Framework \Attributes \DataProvider ;
7
+
8
+ final class ModelTest extends TypeInferenceTestCase
9
+ {
10
+ /**
11
+ * @return iterable<string, mixed[]>
12
+ */
13
+ public static function fileAsserts (): iterable
14
+ {
15
+ yield from self ::gatherAssertTypes (__DIR__ . '/../../data/database/eloquent/model.php ' );
16
+ }
17
+
18
+ #[DataProvider('fileAsserts ' )]
19
+ public function testFileAsserts (
20
+ string $ assertType ,
21
+ string $ file ,
22
+ mixed ...$ args
23
+ ): void {
24
+ $ this ->assertFileAsserts ($ assertType , $ file , ...$ args );
25
+ }
26
+
27
+ public static function getAdditionalConfigFiles (): array
28
+ {
29
+ return [__DIR__ . '/../../../../extension.neon ' ];
30
+ }
31
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace Tests \Types \Fakes ;
4
+
5
+ use Illuminate \Database \Eloquent \Model ;
6
+
7
+ final class User extends Model
8
+ {
9
+ //
10
+ }
Original file line number Diff line number Diff line change 2
2
3
3
use function PHPStan \Testing \assertType ;
4
4
5
- /** @var \Illuminate\Database\Eloquent\Builder $builder */
5
+ /** @var \Illuminate\Database\Eloquent\Builder<\Tests\Types\Fakes\User> $builder */
6
6
7
- assertType ('Illuminate\Database\Eloquent\Model |null ' , $ builder ->first ());
7
+ assertType ('Tests\Types\Fakes\User |null ' , $ builder ->first ());
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ use Illuminate \Database \Eloquent \Model ;
4
+
5
+ use function PHPStan \Testing \assertType ;
6
+
7
+ class User extends Model
8
+ {
9
+ public function test (): void
10
+ {
11
+ /** @var \Illuminate\Database\Query\Builder $baseBuilder */
12
+
13
+ assertType ('Illuminate\Database\Eloquent\Builder<static(User)> ' , $ this ->newEloquentBuilder ($ baseBuilder ));
14
+ assertType ('static(User)|null ' , $ this ->newEloquentBuilder ($ baseBuilder )->first ());
15
+
16
+ assertType ('Illuminate\Database\Eloquent\Builder<static(User)> ' , self ::query ());
17
+ assertType ('static(User)|null ' , self ::query ()->first ());
18
+ }
19
+ }
You can’t perform that action at this time.
0 commit comments