Laravel与OR案例的关系

时间:2018-06-27 23:26:40

标签: laravel laravel-5 model relationships

假设我有一个用户模型,也有一对模型,它由2个用户father_idmother_id组成,这些用户本质上是user_ids

在用户模型上,我有

public function kids() {
    return $this->hasMany('App\Kid', 'father_id');
}

但是,我想检查user_idfather_id还是mother_id,请返回相关的Kid模型。

有没有一种方法可以通过单一关系实现?处理这种情况的正确方法是什么,因此我可以使用$user->kids来检查这两种情况?

1 个答案:

答案 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值在同一线程运行中发生变化,它也会利用以前的关系。这可能会导致有害的错误。