Laravel Eager加载,过滤和限制列字段不起作用

时间:2013-12-21 15:18:35

标签: laravel-4

我想在我的频道hasmany关系中过滤我选择的列,并使用where方法过滤它但无济于事。有什么想法吗?

$data['users'] = Users::with(array('Channels' => function($q){
  $q->where('is_default','=', 1)->select(array('channel_name', 'channel_id'));
}))->get(array('id'));

但这完全正常。

$data['users'] =  Users::with(array('Channels' => function($q){
 $q->where('is_default','=', 1)
}))->get(array('id'));

我尝试先将select方法放在where方法仍然不起作用之前

修改 这些是执行的SQL查询,这实际上是我想要的,但它没有填满关系属性。

created_at id =?中选择namereferrerusersstatus限制10偏移0

channel_name中选择channel_idchannels,其中channelsuser_id位于(?,?,?,?,?,?,?,? ,?,?)和is_default =?

1 个答案:

答案 0 :(得分:0)

你可以试试这个

$data['users'] = Users::with(array('Channels' => function($q){
    $q->select('id, channel_name', 'user_id')->where('is_default','=', 1);
}))->get();

如果要在get()中选择列,请确保为key表选择关联的channels,例如,假设user_id是外键chennels table所以你可以用这个来做:

$data['users'] = Users::with(array('Channels' => function($q){
    $q->select('id, channel_name', 'user_id')->where('is_default','=', 1);
}))->get(array('id'));

如果您未在主查询中选择primary key,在子查询中选择foreign key,则with将无效。在querys/select中,相关的密钥都应该可用。