Laravel 与 OR 案例的关系

Laravel Relationship with OR case

假设我有一个 User 模型,还有 Couple 模型,它由 2 个用户组成,father_idmother_id 本质上是 user_ids

在用户模型上,我有

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

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

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

有一种方法,但如果有相关模型,您通常不会将其用于"check"。

如果您有一个字段来确定模型是代表父亲还是母亲,例如 is_father,您可以这样做:

public function kids()
{
    return ($this->is_father)
        ? $this->hasMany(Kid::class, 'father_id')
        : $this->hasMany(Kid::class, 'mother_id');
}

本质上,关系方法必须return一个关系实例。但是你可以在 return 之前做逻辑。

注意: 关系被缓存,因此即使 is_father 值在同一个线程 运行 中发生变化,它也会利用与它以前做过。这可能会导致不需要的错误。