1

我可以1从商店获取用户在媒体上的点赞列表1

$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;

但后来我得到

未定义属性:Illuminate\Database\Eloquent\Collection::$media

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');
    }
}
4

2 回答 2

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();
于 2015-06-20T20:09:45.983 回答
0

使它与

$store->medias()->whereHas('likes', function($q) use($user) {
        return $q->where('user_id', '=', $user->id);
    });
于 2015-06-21T15:11:11.043 回答