laravel - Laravel HasMany 与 where 条件
问题描述
我有两个tables
,users
和产品。产品表结构为:
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();
推荐阅读
- css - 在 Laravel 5.8 中实现分页链接样式错误
- javascript - 当 Animated.View 有一个 Animated.ScrollView 作为孩子时,PanResponder 在 Android 上无法正常工作
- html - 如果我必须将文本拆分为多个 div,我将如何使 text-align 的行为方式与对单个文本的行为方式相同
- python - 使用 Keras fit_generator 训练后保存的模型无法正确给出预测
- java - 覆盖等于和等于之间有什么区别?
- excel - 如何插入一个要求输入日期的输入框,然后在该日期之后添加到行?
- javascript - 如何遍历 JavaScript 中的静态值(常量)列表?
- android - 无法生成用于在 Android Studio 中发布的签名 APK
- html - 在较小的屏幕上更改网格项目的顺序
- excel - 无法让 VBA 编辑现有超链接