使用WHERE方法查询Laravel中的关系

时间:2014-01-29 23:19:31

标签: php laravel eloquent

我有一个名为“User”的模型,即“belongsToMany”项目。 这种关系很好,所以我可以很容易地做到这样的事情:

User::find(4)->items->find(1)->name

现在,我想做这样的事情:

User::find(4)->items->where('name', '=', 'stick')->get()

我希望代码能够返回所有用户名称为“stick”的项目,但不幸的是,这不会发生什么。我收到此错误:

"Call to undefined method Illuminate\Database\Eloquent\Collection::where()"

我还尝试构建查询范围:

public function scopeName($query, $name)
{
    return $query->whereName($name);
}

当我执行以下操作时,查询范围有效:

Item::name('SC')->get()

User::find(4)->items->name('SC')->get() 

仍然无效。

您能否帮我退回所有用户名称为“stick”的项目?

2 个答案:

答案 0 :(得分:1)

如果您希望获得一个名为“stick”的单个用户的项目,您可以这样做:

$stickItems = Item::whereUserId(4)->whereName('stick')->get();

我们在这里使用Eloquent的dynamic where methods,但您可以像这样重写它:

$stickItems = Item::where('user_id', '=', 4)->where('name', '=', 'stick')->get();

那应该能得到你想要的东西。

答案 1 :(得分:0)

你必须调用items()方法,而不是使用魔法属性:

User::find(4)->items()->where('name', 'stick')->get();
//                  ^^