Laravel多个关系项的集合

时间:2017-06-29 12:09:45

标签: php laravel

我的用户有很多商店,而商店有很多商品

  

现在我想知道,有没有办法可以为这个用户收集所有产品的集合。

无需经过他所拥有的商店。

当前方法,返回带有产品的商店集合而不是产品集合

$products = \Auth::user()->shops()->with('products')->get();

2 个答案:

答案 0 :(得分:5)

您需要定义HasManyThrough relation

class User extends Model
{
    ...
    public function products()
    {
        return $this->hasManyThrough('App\Product', 'App\Shop');
    }
    ...
}

答案 1 :(得分:1)

您可以使用pluck方法从多个商店获取所有产品。

public function products()
{
    return $this->shops->pluck('products');
}

public function shops()
{
    return $this->belongsToMany(Shop::class);
}

$this是您的用户模型的实例)

在您的商店模型上,您必须与产品建立Laravel关系

public function products()
{
    return $this->belongsToMany(Product::class);
}