假设我有一个用户模型,也有一对模型,它由2个用户father_id
和mother_id
组成,这些用户本质上是user_ids
在用户模型上,我有
public function kids() {
return $this->hasMany('App\Kid', 'father_id');
}
但是,我想检查user_id
是father_id
还是mother_id
,请返回相关的Kid模型。
有没有一种方法可以通过单一关系实现?处理这种情况的正确方法是什么,因此我可以使用$user->kids
来检查这两种情况?
答案 0 :(得分:1)
有一种方法,但是通常不会使用它来“检查”是否有相关的模型。
如果您有一个字段来确定模型是否代表父亲或母亲,例如is_father,则可以执行以下操作:
public function kids()
{
return ($this->is_father)
? $this->hasMany(Kid::class, 'father_id')
: $this->hasMany(Kid::class, 'mother_id');
}
本质上,关系方法必须返回一个关系实例。但是您可以在返回逻辑之前做逻辑运算。
注意:该关系被缓存,因此,即使is_father值在同一线程运行中发生变化,它也会利用以前的关系。这可能会导致有害的错误。