Фильтрация данных сводной таблицы с помощью моделей Laravel
Допустим, у меня есть три таблицы (это всего лишь пример):
users
user_id
username
roles
role_id
name
user_roles
user_id
role_id
primary (boolean)
И соответствующие модели laravel:
class User extends Eloquent {
public function roles() {
return $this->belongsToMany('Role')->withPivot('primary');
}
}
class Role extends Eloquent {
public function users() {
return $this->belongsToMany('User')->withPivot('primary');
}
}
Я хочу получить список всех пользователей, но только с основными ролями в возвращаемом объекте. Если я использую что-то вроде:
$users = User::with('roles')->find(1);
Каждый пользовательский объект будет иметь список всех соответствующих ему ролей. Я хочу, чтобы этот список содержал только основные роли. Есть ли способ сделать это из запроса, без последующей обработки массива $users?
8
2 answers
Попробуйте выполнить следующее:
$users = User::with(array('roles' => function($query)
{
$query->where('primary', 1);
}))->find(1);
9
Author: Anam, 2013-12-24 11:45:25
Я бы предложил вам создать дополнительный метод в вашей пользовательской модели следующим образом:
public function primaryRoles() {
return $this->roles()->wherePivot('primary', true);
}
Затем используйте что-то вроде:
$users = User::with('primaryRoles')->find(1);
Кроме того, раздел "Ограничения по нагрузке" в документации может иметь значение.
14
Author: Dkok, 2013-12-24 11:47:21