Laravel 获取一系列关系物品

2022-08-30 14:26:44

我被困在这似乎是一个简单的任务上。

我有一个用户,它有很多商店,有很多产品。

我正在尝试为某个用户获取所有产品。

这是有效的,并且正在将商店的产品退回

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

但我只需要一个产品的集合。我尝试了以下方法,但它搞砸了查询

\Auth::user()->shops()->with('products')->select('products.*')->get();

知道我做错了什么吗?谢谢!


答案 1

你可以使用这个 :

\Auth::user()->shops()->with('products')->get()->pluck('products')->flatten();

如果您不想复制,可以使用->unique()

如果要直接处理查询(用于性能):


 Product::whereHas('shops', function($query){
    $query->where('user_id', auth()->user()->id);
 })->get();


答案 2

您需要的是用户模型和产品模型之间的关系。

这是可能的使用关系..hasManyThrough

用户模型

public function products()
{
    return $this->hasManyThrough('App\Product', 'App\Shop')
}

现在,您可以使用以下命令访问所有用户的产品

Auth::user()->products;

推荐