繁体   English   中英

Laravel嵌套关系不起作用

[英]Laravel nested relationship not working

我有一个存储基本用户信息(例如用户名,密码等)的用户模型。

还有3种类型的用户: StudentStaffParent 每种类型都有一个单独的模型。 例如,有一个Student模型属于User模型。

我还有一个关系表,用于存储学生和父母之间的关系。 此关系存储在用户模型中。

如果我做类似的事情:

App\Student::first()->user->relations;

它很高兴返回相关父母的集合。

在我的Students模型中,我有一个名为hasParent()的方法,该方法接受给定的用户ID,并检查以确保学生具有该ID的父母。 在这种方法中,我有以下几点:

public function hasParent($parent)
{
    return $this->user->relations->where('id', $parent)->count() === 1;
}

但是,这将返回错误Cannot call 'where' on a non-object 如果我进一步调试,则$this->user->relations返回一个空数组。

问题是,和上面一样,如果我分别调用方法,则会得到想要的结果。

所以要澄清一下,如果我运行:

App\Student::first()->user->relations;

这样就可以返回一组用户。

但是,在Student模型中,如果我打电话:

$this->user

然后我找到了正确的学生

如果我打电话

$this->user->relations

我得到一个空数组。 哪个没有道理! 谁能对此有所启示,否则我可能做错了什么? 如果您需要更多信息,请告诉我。

您需要调用以下关系中的where

public function hasParent($parent)
{
   return $this->user->relations()->where('id', $parent)->count() === 1;
}

关系见后括号。 如果您在不带括号的情况下调用该关系,Laravel将返回一个集合。 要获得构建器,您需要调用带有括号的关系。

我建议-为了避免产生巨大的查询开销(您可以通过调用“查询”构建器而不是集合,并依靠Query构建器来定位)来做您已经在做的事情,除了使用Illuminate Collections filter -method:

public function hasParent($parent)
{
   return $this->user->relations->filter(function($relation) use ($parent){return $entity->id === $parent;})->count() === 1;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM