Search code examples
laraveleloquentlaravel-5.5

nested relation with condition in laravel


I have 3 models

User - Role- Permission

User

class User extends Model
{
   protected $fillable = [
    'name', 'email', 'password',
    ];
    public function roles()
  {
      return $this->belongsToMany(Role::class);
  }

 }

Role

class Role extends Model
{
    protected $fillable = ['name' , 'label'];

    public function users()
    {
        return $this->belongsToMany(User::class);
    }

    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }
}

Permission

class Permission extends Model
{
    protected $fillable = ['name' , 'label'];

    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

I want get List of users whose permissions were updated on a specific date

I know I sould use something like below but I dont know exatly how to use Where

$users = User::with('roles.permissions')->orderBy('name', 'asc')->paginate(25);

thanks alot


Solution

  • Use whereHas():

    $users = User::whereHas('roles.permissions', function($query) use($date) {
        $query->whereDate('permission_role.updated_at', $date);
    })->orderBy('name', 'asc')->paginate(25);