laravel - Laravel 从深度关系中获取数据
问题描述
我有 3 张桌子:
用户 | 篮子 | 项目 |
---|---|---|
ID | ID | ID |
用户身份 | 篮子编号 | |
价格 |
我正在尝试建立一个雄辩的关系,通过它我可以获得所有物品和相应的篮子,其中物品的价格是 X。我想要它,以便我可以简单地使用 $user->items(x) 并得到结果。
我不确定这是否可以单独使用关系来完成,或者我是否必须求助于编写自定义查询。
任何和所有的帮助和指导将不胜感激!
解决方案
您正在寻找的关系是hasManyThrough
https://laravel.com/docs/7.x/eloquent-relationships#has-many-through
用户模式
public function items()
{
return $this->hasManyThrough(Item::class, Bucket::class);
}
我想你想使用的方式是不可能实现的。
可能的用法
$user->items()->where('price', x);
如果您定义自定义范围
项目模式
public function scopeWherePrice($query, $value)
{
return $query->where('price', $value);
}
用法
$user->items()->wherePrice(x);
编辑
如果你真的想写这样的代码,$user->items(x)
你可以在User Modal
.
请注意,这不是关系,只是另一种获取结果的方法。
用户模式
public function items($price)
{
return this->items()->where('price', $price)->get();
}
推荐阅读
- nginx - nginx server config: matching URI returns 404
- security - How can I block search engine indexing of files and subdirectories other than root directory .php and .html files without listing the directory names?
- visual-studio - Visual Studio does not build with "Unable to copy file. Access denied."
- python - 轴标签部分中的 Matplotlib 斜体 - 应用于默认字体但未指定字体
- c - struct inode_operations permission function arguments
- sql - Oracle DB query not returning the expecting results
- android - android studio cannot resolve symbol R.raw
- c++ - Is it possible to create a variadic template function with a few parameters being non-variadic?
- python - 下面代码的输入形状应该是什么
- r - 如果另一个较小数据框中的该键的值满足特定条件,则更改 R 数据框中的值