通过加入检索唯一订阅者
我会尽力用Lists代替来解释它Adressbook,因为我无法真正理解你的模型,这可能会导致进一步的混乱。
如果我正确理解了您的评论,您正在尝试检索与id IN listarray. 在这种情况下,Eager Loading 不是正确的方法。急切加载的目的是为模型预加载关联,以便以后使用它们。在您的情况下,您不是在检索Lists和他们的Subscribers,而是唯一的Subscribers自己。
$lists = Input::get('listsarray');
$subscribers = Subscriber::join('list_subscriber', 'list_subscriber.subscriber_id', '=', 'subscribers.id')
->whereIn('list_subscriber.list_id', $lists)
->groupBy('list_subscriber.subscriber_id')
->get(array('subscribers.*'));
如果您还希望检索与此类订阅者关联的所有列表,您可以这样做:
// Simply include a with('lists') and Eloquent will eager load them
$subscribers = Subscriber::with('lists')
->join('list_subscriber', 'list_subscriber.subscriber_id', '=', 'subscribers.id')
->whereIn('list_subscriber.list_id', $lists)
->groupBy('list_subscriber.subscriber_id')
->get(array('subscribers.*'));
急切加载
如果只是为了提高性能,你不需要使用 distinct,Laravel 已经做到了。Eloquent 的行为如下:
- 获取所有
lists.
- 迭代
lists构建一系列独特的list_ids
- 获取所有
list_subscribers使用WHERE list_id IN (X, Y, Z)
- 遍历所有
list_subscribers构建一个独特的数组subscriber_id
- 获取所有
subscribers使用WHERE id IN (X, Y, Z)