Eloquent有()返回空白关系

时间:2017-01-17 13:12:29

标签: laravel eloquent

嘿伙计我有以下设置;

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()作为内部联接只返回具有相关实体的行吗?

此致

2 个答案:

答案 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()中查看是否/何时中断