kJa*_*esy 4 laravel eloquent laravel-4
背景
我有一个列表模型属于并有许多订阅者.当然还有一个属于并拥有许多List的订阅者.
问题
我想从多个列表中急切加载所有订阅者.但是,我只对不同的订阅者感兴趣,因为订阅者可以拥有并且确实属于多个列表.
我的尝试
我使用过这种distinct()方法,但这并没有产生任何乐趣.我也可以遍历结果集来手动切出重复项.只是想知道是否有办法让Laravel为我做肮脏的工作?
码
$lists = Input::get('listsarray');
$addresses = Addressbook::with(array('subscribers' => function($query)
{
$query->where('active', '=', 1);
// $query->distinct(); //This didn't work
}))->whereIn('id', $lists)->get();
Run Code Online (Sandbox Code Playgroud)
我会尽力用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.*'));
Run Code Online (Sandbox Code Playgroud)
如果您还希望检索与此类订阅者关联的所有列表,您可以这样做:
// 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.*'));
Run Code Online (Sandbox Code Playgroud)
如果只是改善性能,你不需要使用不同的,Laravel已经做到了.Eloquent的行为如下:
lists.lists构建一个独特的数组来迭代list_idslist_subscribers使用WHERE list_id IN (X, Y, Z)list_subscribers建筑物迭代一系列独特的subscriber_idsubscribers使用WHERE id IN (X, Y, Z)| 归档时间: |
|
| 查看次数: |
4245 次 |
| 最近记录: |