当前位置: 首页 > 知识库问答 >
问题:

Laravel获取一组关系项

左丘繁
2023-03-14

我被困在这个看似简单的任务上。

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

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

这是有效的,并返回商店与他们的产品

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

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

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

知道我做错了什么吗?非常感谢。

共有3个答案

齐学文
2023-03-14

在这种情况下,您可以使用延迟加载:

auth()->user()->load('shops.products');

要迭代产品,请执行以下操作:

@foreach (auth()->user()->shops as $shop)
    @foreach ($shop->products as $product)
        {{ $product->name }}
    @endforeach
@endforeach

如果您只需要产品:

Product::whereHas('shop', function ($q) {
    $q->where('user_id', auth()->id());
})->get();

在这两种情况下,对DB的查询数量相同,因此我将在实际应用程序中使用第一个示例。

曾晨
2023-03-14

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

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

用户模型

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

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

Auth::user()->products;
邓德惠
2023-03-14

你可以用这个:

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

如果不想复制,可以使用-

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


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

 类似资料:
  • 我有users表,它与vendordetails表有hasOne关系。 vendordetails表包含country_id、state_id和city_id,与Country、State和City模型有归属关系。 vendorDetail.php模型为:- 如果我查询users表,如何获取国家、州和城市的记录。 在这个查询中,它只找到vendordetails表的结果,我还想要country、s

  • 我正在构建一个小应用程序,以便在Laravel7中试验多对多关系。此应用程序涉及项目和用户(多对多)。 经过身份验证的用户可以创建新项目。每个项目都有自己的页面。在项目页面上,将呈现一个列表,其中包含作为该项目成员的每个用户的名称,在每个名称旁边是一个按钮,该按钮将从该项目中删除特定用户/成员。 现在,我被困在“删除用户”功能上。我不明白如何获取列表中每个用户的id,并将其传递给将“分离”多对多关

  • 我试图显示每个评论块中的用户名。目前,我已经让它显示文章注释和注释主体,但在我的表中,我已经为每个注释分配了用户id。我可以让它显示用户id,但我不确定如何查找分配给该用户id的用户名。 查看: 示范条款: 模型注释: 物品管理员: 错误: SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“users.comments\u id”(SQL:select*fromwhe

  • 我有3个模型和一个透视表: 学校年-模型 ID 课程模式 ID schoolyear_id 课程\学生-数据透视表 课程号 学生证 学生模型 ID 关系是: 一学年有许多课程 一门属于任何学生的课程 在任何课程中的学生 什么是最快、更优雅的方法来找到学生进入一个学年,并且能够按学生属性进行排序?

  • 我正在与Laravel 5.4合作。我正在使用雄辩的ORM。我已经创建了以国家和州为单位的表格。二者的描述如下: 国家表: 国家表: 现在,我编写了两个方法来设置状态和国家表之间的关系。 国家型号: 状态模型: 现在,我将创建编辑功能,以便无法获取国家名称。 我已将查询写成 在这里,我得到的只有州数据和国家数据为空。 那么,为了获得州和国家数据,我应该做些什么改变呢?

  • 但是,它没有从地址表返回正确的。我怎么能那么做? 这是我得到的错误消息: