Laravel 获取关系项的集合

新手上路,请多包涵

我坚持这个看似简单的任务。

我有一个用户有很多商店有很多产品..

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

这是有效的,并且正在将商店与他们的产品一起退回

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

但我只需要产品的集合。我尝试了以下但它弄乱了查询

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

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

原文由 Miguel Stevens 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 289
2 个回答

你可以使用这个:

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

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

如果您想直接处理查询(为了性能):


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

原文由 Mathieu Ferre 发布,翻译遵循 CC BY-SA 4.0 许可协议

你需要的是用户模型和产品模型之间的关系..

这可以使用 hasManyThrough 关系..

用户模型

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

现在,您可以访问所有用户的产品

Auth::user()->products;

原文由 Demonyowh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏