在我的Laravel应用程序中,我有用户,朋友和群组的概念。用户可以创建朋友并将其分类到组中。
用户可以有很多朋友:
function friendsOfMine()
{
return $this->belongsToMany('App\User', 'helpers', 'user_id', 'helper_id')
->wherePivot('accepted', '=', 1);
}
一个群组可以有很多用户:
public function groupMembers()
{
return $this->belongstoMany('App\User')->withTimestamps();
}
在用于向群组添加朋友的用户界面中,我想显示用户朋友的完整列表,但不包括那些已添加到群组中的朋友。我的群组控制器功能看起来像这样,虽然我非常积极地离开基地。
public function add($id)
{
$group = Group::findOrFail($id);
$helpers = $group->groupMembers;
$id = $helpers->lists('id');
$invitees = $this->user
->friendsOfMine()
->where('helper_id', '!=', $id)
->Paginate(5);
return view('groups.add', compact('group','helpers','invitees'));
}
理想情况下,我喜欢的是写作方式:
$helper = $group->friendsOfMine->not->groupMembers->Paginate(5);
是否有使用两种不同型号的功能过滤数据?
答案 0 :(得分:0)
使用您的方法,您必须使用whereNotIn()
,因为您有一系列ID:
$id = $helpers->lists('id');
$invitees = $this->user
->friendsOfMine()
->whereNotIn('helper_id', $id)
->Paginate(5);
但是你也可能会这样(假设关系group
)
$invitees = $this->user
->friendsOfMine()
->whereDoesntHave('group', function($q) use ($id){
$q->where('group_id', $id); // Note that id is the group id (not the array of ids from the helper)
})
->Paginate(5);
要获得更好的语法(例如您的示例),您应该查看Query Scopes