【发布时间】:2015-10-16 10:08:28
【问题描述】:
我有一个用户模型,它存储用户名、密码等基本用户信息。
还有 3 类用户,Student、Staff 和 Parent。每种类型也有一个单独的模型。例如,有一个Student 模型属于User 模型。
我还有一个关系表,用于存储学生和家长之间的关系。这种关系存储在 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
我得到一个空数组。这没有意义!任何人都可以对此有所了解,或者我可能做错了什么?如果您需要任何进一步的信息,请告诉我。
【问题讨论】:
-
你能多解释一下关系吗?
-
为什么不使用具有对应值的角色模型学生、员工、父母并将其与用户模型相关联呢?它会简化你的结构吗?
标签: php laravel laravel-5.1