use*_*110 8 php filtering pivot-table laravel eloquent
假设我有三个表(这只是一个例子):
users
user_id
username
roles
role_id
name
user_roles
user_id
role_id
primary (boolean)
Run Code Online (Sandbox Code Playgroud)
和相应的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');
}
}
Run Code Online (Sandbox Code Playgroud)
我想获得所有用户的列表,但只返回返回对象中的主要角色.如果我使用类似的东西:
$users = User::with('roles')->find(1);
Run Code Online (Sandbox Code Playgroud)
每个用户对象都将包含与其对应的所有角色的列表.我希望此列表仅包含主要角色.有没有办法从查询中执行此操作,而无需后处理$ users数组?
小智 14
我建议您在User模型中创建一个额外的方法,如下所示:
public function primaryRoles() {
return $this->roles()->wherePivot('primary', true);
}
Run Code Online (Sandbox Code Playgroud)
然后使用类似的东西:
$users = User::with('primaryRoles')->find(1);
Run Code Online (Sandbox Code Playgroud)
此外,文档中的"Eager Load Constraints"部分可能是相关的.
Ana*_*nam 10
请尝试以下方法:
$users = User::with(array('roles' => function($query)
{
$query->where('primary', 1);
}))->find(1);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13556 次 |
最近记录: |