2015-06-20 37 views
1

我能得到喜歡的用戶1做了一個媒體從商店1 Laravel洋洋灑灑 - 從集合父的名單

$medias = User::find(1)->likes()->with('media')->whereHas('media', function($q) { 
    $q->where('store_id', '=', 1); 
})->get(); 

的名單,但我需要檢索媒體的名單,所以我嘗試

$medias = User::find(1)->likes()->with('media')->whereHas('media', function($q) { 
    $q->where('store_id', '=', 1); 
})->get()->media; 

但後來我得到

未定義的屬性:照亮\數據B ASE \雄辯\收藏:: $媒體

class User extends Model 
{ 
    public function likes() 
    { 
     return $this->hasMany('App\Like'); 
    } 
} 

class Media extends Model 
{ 
    public function store() 
    { 
     return $this->belongsTo('App\Store'); 
    } 

    public function likes() 
    { 
     return $this->hasMany('App\Like'); 
    } 
} 

class Like extends Model 
{ 
    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

    public function media() 
    { 
     return $this->belongsTo('App\Media'); 
    } 
} 

回答

0

使它與

$store->medias()->whereHas('likes', function($q) use($user) { 
     return $q->where('user_id', '=', $user->id); 
    }); 
0

這是因爲你的媒體分開每個喜歡。您應該使用:

$likes = User::find(1)->likes()->with('media')->whereHas('media', function($q) { 
    $q->where('store_id', '=', 1); 
})->get(); 

foreach ($likes as $like) { 
    $media = $like->media; 
    // now you can do something with your media 
} 

編輯

如果你想獲得唯一介質,您應該添加到您的User模型如下關係:

public function medias() 
{ 
    return $this->hasManyThrough('App\Media','App\Like'); 
} 

現在,讓你的媒體,你應該這樣做:

$medias = User::find(1)->medias()->where('store_id', '=', 1)->get(); 
+0

我想知道是否有可能直接檢索媒體列表而不必循環瀏覽喜歡的PHP? –

+0

@GuilhermeMiranda我已經更新了我的回答 –

+0

看起來像我正在尋找但沒有工作。 '內部連接喜歡like.id = medias.like_id'。應該是'inner join喜歡在likes.media_id = medias.id'上 –

相關問題