Find a Rector rule

Find the best Rector rule to solve your problem. Searching through 1011 rules.

Found 7 rules, grouped by set: Clear

Type Declarations 7 matches

Add generic return type to relations in child of Illuminate\Database\Eloquent\Model

 use App\Account;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\HasMany;

 class User extends Model
 {
+    /** @return HasMany<Account, $this> */
     public function accounts(): HasMany
     {
         return $this->hasMany(Account::class);
     }
 }

Add generic return type to relations in child of Illuminate\Database\Eloquent\Model

 use App\Account;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\HasMany;

 class User extends Model
 {
+    /** @return HasMany<Account> */
     public function accounts(): HasMany
     {
         return $this->hasMany(Account::class);
     }
 }
AddNewGenericReturnTypeToRelationsRector laravel/framework >=11.15 <12.3

Add generic return type to relations in child of Illuminate\Database\Eloquent\Model

 use App\Account;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\HasMany;

 class User extends Model
 {
+    /** @return HasMany<Account, $this> */
     public function accounts(): HasMany
     {
         return $this->hasMany(Account::class);
     }
 }

Add type hinting to where relation has methods e.g. whereHas, orWhereHas, whereDoesntHave, orWhereDoesntHave, whereHasMorph, orWhereHasMorph, whereDoesntHaveMorph, orWhereDoesntHaveMorph

-User::whereHas('posts', function ($query) {
+User::whereHas('posts', function (\Illuminate\Contracts\Database\Query\Builder $query) {
     $query->where('is_published', true);
 });

-$query->whereHas('posts', function ($query) {
+$query->whereHas('posts', function (\Illuminate\Contracts\Database\Query\Builder $query) {
     $query->where('is_published', true);
 });

Change typehint of closure parameter in where method of Eloquent or Query Builder

 /** @var \Illuminate\Contracts\Database\Query\Builder $query */
-$query->where(function ($query) {
+$query->where(function (\Illuminate\Contracts\Database\Query\Builder $query) {
     $query->where('id', 1);
 });

Automatically type hints your tappable closures

-tap($collection, function ($collection) {}
+tap($collection, function (Collection $collection) {}

Add generic Builder return type to scopes in child of Illuminate\Database\Eloquent\Model

 use App\Post;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Builder;

 class Post extends Model
 {
+    /**
+     * @param \Illuminate\Database\Eloquent\Builder<static> $query
+     * @return \Illuminate\Database\Eloquent\Builder<static>
+     */
     public function scopePopular(Builder $query): Builder
     {
         return $query->where('votes', '>', 100);
     }
 }