2013-12-21 63 views
1

我想過濾我在我的渠道hasmany關係中的列的選擇,以及使用where方法過濾它,但無濟於事。任何想法?Laravel Eager加載,過濾和限制列字段不起作用

$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')); 

我試圖把選擇方法之前,首先將在其中方法仍不能正常工作

編輯: 這些SQL查詢的執行這真是我想要的東西但它不填滿關係屬性。

選擇created_atidnamereferrerusers其中status =?限制10偏移0

選擇channel_name,channel_idchannels其中channelsuser_id in(?,?,?,?,?,?,?,?,?,?)和is_default =?

回答

0

如果你想在get()選擇列然後確保你選擇相關keychannels表,例如你可以試試這個

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

,假設user_idchennels table這樣你就可以外鍵做到這一點使用此:

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

如果不選擇在子查詢在主查詢的primary keyforeign key然後with將無法​​正常工作。在這兩個querys/select相關的鍵應該是可用的。

+0

嗨,感謝您的回覆,結構如下這個用戶模型有很多渠道。頻道表具有引用users表中的id的外鍵user_id。我嘗試了你的建議,在get()中添加user_id並返回缺少字段的sql錯誤。 SQL是這樣的:從'users'中選擇'id','user_id',這真的是不正確的。 –

+0

在上面添加了一個修改。 –

+0

檢查更新後的答案,在兩個答案中'user_id'必須存在於'select'語句中,因爲'user_id'是外鍵。 –