Laravel HasMany 具有 where 条件

问题描述 投票:0回答:1

我有两个

tables
users
和产品。产品表结构为:

id 产品名称 用户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);
}
laravel eloquent eloquent-relationship
1个回答
0
投票

您必须在 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();
© www.soinside.com 2019 - 2024. All rights reserved.