User::where('role', $role)->get();
Вы не можете сделать это или достичь этого напрямую. Это потому, что вы сравниваете столбец (role
) с объектом отверстия. Что вы можете сделать, это определить Локальные области действия .
Я знаю, что могу использовать $ role-> users, но я опускаю это, потому что я не могу использовать это, если у меня есть несколько отношений ownTo, которые я хочу запросить.
На самом деле, в этом случае вы используете не belongsTo()
отношение, а hasMany()
(противоположное). Опять же, вы можете создать Local Scopes , чтобы ограничить ваш запрос, чтобы получить пользователей, соответствующих вашим условиям.
Пример использования пользовательского поиска по столбцу / значению, как вы предложили в последней части вашего вопроса:
/** User.php */
public function hasRoleScope($query, $column, $value)
{
return $query->where("role.{$column}", '=', $value);
}
Тогда вы могли бы сделать:
/** AnyController.php */
User::has_role('name', 'admin')->get();
// equivalent to: User::where('role.name', '=', 'admin)->get();
Вы можете продолжить определять еще один:
/** User.php */
public function scopeActive($query, $value)
{
return $query->where('active', $value);
}
Тогда вы могли бы сделать:
/** AnyController.php */
User::active(true)->get();
// equivalent to: User::where('active', true)->get();
Интересная часть? Вы можете комбинировать области действия:
/** AnyController.php */
User
::active(false)
->has_role('id', 23)
->get();