Основная проблема заключается в том, что у вас была опечатка при использовании вашей области, но из-за того, как вы назвали свою область, это все еще было допустимым предложением where{column}
.
Laravel имеет динамические функции c, такие как where{column}($search)
, которые создают простое предложение where
для значений {column}
и $search
. Возьмите ваш пример:
$users = User::whereRoleNot('super-admin');
whereRoleNot
пытается создать предложение where
для столбца, в вашем случае role_not
(динамически созданный из строки RoleNot
) и таблицы вашей базы данных не имеет этого столбца.
Просто используйте обычное предложение where:
$users = User::where('role', '!=', 'super_admin')->paginate(3);
Редактировать: Если вы хотите использовать область, я бы посоветовал немного изменить имя:
public function scopeRoleIn($query, $role_name){
return $query->whereHas('roles', function($q) use($role_name){
return $q->whereIn('name', (array)$role_name); // Don't use `'` here
});
}
public function scopeRoleNotIn($query, $role_name){
return $query->whereHas('roles', function($q) use($role_name){
return $q->whereNotIn('name', (array)$role_name); // Don't use `'` here
});
}
Затем используйте вашу область следующим образом:
// $users = User::roleIn('super-admin')->paginate(3); // Etc...
$users = User::roleNotIn('super-admin')->paginate(3);
Вы можете использовать scopeWhere...
, но это именование потенциально конфликтует с динамиками Laravel c where{column}
пункты, так что вам следует избегать этого.