2017-01-17 7 views
2

私は以下の設定をしています。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 

ただし、コレクションは空です。

どこが間違っていますか?私は、()は、関連するエンティティを持つ行を返すだけの内部結合として動作すると信じていましたか?直接

よろしく、

答えて

0

使用has()

return Artist::where('last_processed', '!=', '0000-00-00 00:00:00') 
     ->has('releases') 
     ->orderBy('created_at', 'desc') 
     ->limit($limit) 
     ->get(); 

そしてArtistモデルにreleases()関係を追加します。

public function releases() 
{ 
    return $this->hasManyThrough('App\Release', 'App\Album'); 
} 

https://laravel.com/docs/5.3/eloquent-relationships#has-many-through

0

あなたはSにこれを打破しようとしたことがありあなたの質問がどこで失敗しているかを見るためにegments?まず、最初の行の結果をダンプして開始します。Artist::where('last_processed', '!=', '0000-00-00 00:00:00')次にwhereHasを追加し、最後にhas()を追加して、ブレークするかどうかを確認します。

関連する問題