我有两个
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);
}
您必须在 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();