【问题标题】:Laravel Eloquent - list of parent from a collectionLaravel Eloquent - 集合中的父级列表
【发布时间】:2015-09-06 15:09:21
【问题描述】:

我可以从商店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');
    }
}

【问题讨论】:

    标签: php laravel eloquent laravel-5 laravel-collection


    【解决方案1】:

    这是因为您可以为每个点赞单独获取媒体。你应该使用:

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

    【讨论】:

    • 我想知道是否可以直接检索媒体列表而无需遍历 php 上的喜欢?
    • 看起来像我要找的东西,但没有用。 inner join like on likes.id = medias.like_id。应该是inner join likes on likes.media_id = medias.id
    【解决方案2】:

    让它工作

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2019-10-13
      • 2018-11-11
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2018-07-19
      相关资源
      最近更新 更多