所以,我可以急切地加载:
$subscribers = Subscriber::with('lists')->get();
我回家干了。 但是现在我想用英语做什么:
$non_subscribers = Subscriber::without('thislist')->get();
这并不能很好地阅读,但希望它有助于传达我的目标。我可以做两个查询,首先获得所有拥有(并且属于)此列表的订阅者,然后再获取另一个订阅者以检索所有订阅者;然后从另一个中减去一个。
我的问题:是否有可能像上面那样用简单的英语说它呢?
感谢你
答案 0 :(得分:2)
好的,如果你有更好的解决方案,请告诉我们。目前,这个可以解决问题:
$list = Addressbook::with('subscribers')->find($id);
$subscribers = '';
if ($list->subscribers->count() > 0)
{
$subs_array = array();
foreach ($list->subscribers as $list_subscriber)
{
$subs_array[] = $list_subscriber->id;
}
$subscribers = Subscriber::whereNotIn('id', $subs_array)->get(); //the clever bit
}
else
{
$subscribers = Subscriber::get();
}
return Response::json($subscribers);
答案 1 :(得分:2)
您还可以使用鲜为人知的whereDoesntHave方法:
$subscribers = Subscriber::whereDoesntHave('lists', function ($query) use ($id) {
$query->whereId($id);
})->get();
甚至是原始答案的简化版本:
$subscribers = Subscriber::whereNotIn('id', $list->subscribers->lists('id'));