php - Laravel Eloquent 模型与关系
问题描述
我已经在我的代码中实现了 eloquent 关系,但是 Laravel 无法读取我为映射模型中的 eloquent 关系而创建的函数。
用户模型
public function products(){
return $this->hasMany(Product::class,'userid');
}
产品型号
public function users(){
return $this->belongsTo(User::class);
}
产品控制器
$products = Product::with('Users')->Users()->where('users.isActive',1)->get();
return view('product',compact('products'));
我不断从产品控制器收到错误,我还附上了我当前遇到的错误,如下所示。
如何使用 where 条件(例如“Users.isActive = 1”)获取所有产品和用户数据。
谢谢。
解决方案
您可以使用whereHas
从关系中过滤。
$products = Product::with('users')
->whereHas('users', function ($query) {
$query->where('isActive', 1);
})
->get();
此外,使用单数名词表示关系通常是一个好主意,belongsTo
因为它返回一个对象,而不是一个集合。
public function user() {
return $this->belongsTo(User::class);
}
$products = Product::with('user')
->whereHas('user', function ($query) {
$query->where('isActive', 1);
})
->get();
编辑
如果你想用产品检索用户,你应该使用用户模型进行查询。
$users = User::with('products')
->where('isActive', 1)
->get();
然后您可以通过以下方式检索用户和产品
foreach($users as $user) {
$user->products;
// or
foreach($users->products as $product) {
$product;
}
}
推荐阅读
- runtime - 如何在运行时使用 LLVM 传递获取变量的值?
- python - 如何使用 Scrapy 提取 URL 的一部分
- firebase - Firebase 安全规则跨项目
- java - @Data 没有为静态嵌套类创建构造函数
- matlab - 在MATLAB中填充两条直线曲线之间的区域
- python - python3 - urllib - ssl - UnicodeDecodeError
- pandas - 如何在传递给 Plotly 函数之前重塑 Pandas 数据框?
- javascript - 如何在页面加载时用javascript中的另一个文本替换文本?
- c++ - 二进制表达式的C++无效操作数?
- android-studio-4.0 - 如何解决由于设备离线而导致安装失败的问题?会话“应用程序”:安装未成功。无法安装应用程序。重试