嘿伙计我有以下设置;
Artist
id
name
Album
id
name
artist_id
Release
id
name
album_id
我只想归还拥有专辑的艺术家,这些专辑有发行版
我当前的查询是这样的吗?
/**
* Helper function returns last artists added
*/
public static function getRecentArtists($limit)
{
return Artist::where('last_processed', '!=', '0000-00-00 00:00:00')
->whereHas('albums', function($query){
$query->has('releases');
})
->orderBy('created_at', 'desc')->limit($limit)->get();
}
但是当我通过;
检查返回的结果时$artists[0]→albums[0]→releases
然而,收集是空的。
我哪里错了?我相信has()作为内部联接只返回具有相关实体的行吗?
此致
答案 0 :(得分:0)
直接使用has()
:
return Artist::where('last_processed', '!=', '0000-00-00 00:00:00')
->has('releases')
->orderBy('created_at', 'desc')
->limit($limit)
->get();
并将releases()
关系添加到Artist
模型:
public function releases()
{
return $this->hasManyThrough('App\Release', 'App\Album');
}
https://laravel.com/docs/5.3/eloquent-relationships#has-many-through
答案 1 :(得分:0)
您是否尝试将其拆分为细分以查看查询失败的位置?首先从转储第一行Artist::where('last_processed', '!=', '0000-00-00 00:00:00')
的结果开始,然后在whereHas中添加,最后在has()中查看是否/何时中断