4

所以,我可以急于加载:

$subscribers = Subscriber::with('lists')->get();

我在家里干。但现在我想做英文会读到的东西:

$non_subscribers = Subscriber::without('thislist')->get();

这读起来不太好,但希望它有助于传达我的目标。我可以做两个查询,首先获取所有拥有(并属于)这个列表的订阅者,然后再获取一个来检索所有订阅者;然后从另一个中减去一个。

我的问题:是否有可能像上面那样用简单的英语来表达它的雄辩?

感谢您

4

2 回答 2

3

您还可以使用鲜为人知的whereDoesntHave方法:

$subscribers = Subscriber::whereDoesntHave('lists', function ($query) use ($id) {
    $query->whereId($id);
})->get();

甚至是原始答案的简化版本:

$subscribers = Subscriber::whereNotIn('id', $list->subscribers->lists('id'));
于 2015-11-12T17:04:20.393 回答
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);
于 2013-08-14T13:27:17.067 回答