首页 > 解决方案 > Laravel HasMany 与 where 条件

问题描述

我有两个tablesusers和产品。产品表结构为:

ID 产品名称 用户身份 是全球的
1 苹果 10 0
2 香蕉 10 1
3 20 0
4 30 0

这是与产品建立关系的用户模型

public function product()
{
    return $this->hasMany(Product::class);
}

我正在获取产品的控制器

$products = $user->product()->get();

问题:isGlobal = 1必须为每个用户显示带有参数的产品。

如何解决这个问题?


PS:以下解决方案不起作用。

public function product()
{
    return $this->hasMany(Product::class)->where('isGlobal', 1);
}

标签: laraveleloquenteloquent-relationship

解决方案


您必须在 2 个地方应用您的条件:

  • hasMany相关_
  • 急切加载条件

所以首先:

public function products()
{
     return $this->hasMany(Product::class)->where('isGlobal', 1);
}

当您想以这种方式访问​​数据时,这将适用于条件:

$products = $user->products;

但这不适用于急切的加载情况,例如:

$users = User::with('products')->get();

所以你必须在所有急切的加载情况上应用条件,如下所示:

$users = User::with('products' => function($query) {
    $query->where('isGlobal', 1);
})->get();

推荐阅读