首页 > 解决方案 > Laravel 从深度关系中获取数据

问题描述

我有 3 张桌子:

用户 篮子 项目
ID ID ID
用户身份 篮子编号
价格

我正在尝试建立一个雄辩的关系,通过它我可以获得所有物品和相应的篮子,其中物品的价格是 X。我想要它,以便我可以简单地使用 $user->items(x) 并得到结果。

我不确定这是否可以单独使用关系来完成,或者我是否必须求助于编写自定义查询。

任何和所有的帮助和指导将不胜感激!

标签: laraveleloquentrelationshipone-to-manylaravel-7

解决方案


您正在寻找的关系是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();
}

推荐阅读