diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 6dcbbdec..0a1e8640 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -8,6 +8,7 @@ parameters: - src/ - config/ - database/ + - types/ # Level 9 is the highest level level: 5 diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index f0534ebf..64e9cff9 100755 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -51,8 +51,10 @@ public function getSubject(): Relation|EloquentBuilder } /** - * @param EloquentBuilder|Relation|class-string $subject - * @return static + * @template T of Model + * + * @param EloquentBuilder|Relation|class-string $subject + * @return static */ public static function for( EloquentBuilder|Relation|string $subject, @@ -62,7 +64,7 @@ public static function for( $subject = $subject::query(); } - /** @var static $queryBuilder */ + /** @var static $queryBuilder */ $queryBuilder = new static($subject, $request); return $queryBuilder; diff --git a/types/query-builder.php b/types/query-builder.php new file mode 100644 index 00000000..c7453773 --- /dev/null +++ b/types/query-builder.php @@ -0,0 +1,22 @@ + + */ + public function author(): BelongsTo + { + return $this->belongsTo(Author::class); + } +} + +class Author extends Model {} + +assertType('Spatie\QueryBuilder\QueryBuilder', QueryBuilder::for(Book::class)); +assertType('Spatie\QueryBuilder\QueryBuilder', QueryBuilder::for(Book::query())); +assertType('Spatie\QueryBuilder\QueryBuilder', QueryBuilder::for((new Book)->author()));