2016-04-08 22 views
0

我有兩個表歌曲(belongsTo App \ Host)和主機(hasMany App \ Song)。我的歌曲表有attempts列,我的主機表有skip_threshold。我想查詢所有沒有達到其相關主機跳過閾值的歌曲。在Eloquent中引用WHERE子句中的外鍵數據

我該怎麼做?

我已經試過這樣的事情:

return $songs = Song::whereIn('host_id', $available_hosts) 
         ->where('attempts', '<', $songs->host->skip_threshold)->get(); 

我曾經嘗試用雄辯的關係查詢的,但是從測試中我看到這是不行的。我想嘗試使用Eloquent來做到這一點,這樣我就可以利用刀片模板中的加載相關數據。

回答

0

你可以嘗試

$songs = Song::whereHas('host', function($query) { 
    $query->where('skip_threshold', '>', DB::raw('songs.attempts')); 
})->get(); 
+0

這工作根據需要而移除其中子句,我如何將其添加到查詢中?我只希望允許查詢某些主機密鑰 – Imran

+0

只需按照之前描述的方式進行操作即可。 @大衛爲你做了。 – trinvh

1

如果我理解你在找什麼,你可以連續使用where子句,像這樣:

$songs = Song::whereHas('host', function($query) { 
    $query->where('skip_threshold', '>', DB::raw('songs.attempts')); 
})->whereIn('host_id', $available_hosts)->get();