【问题标题】:Laravel Relationship with OR caseLaravel 与 OR 案例的关系
【发布时间】:2018-12-06 22:29:11
【问题描述】:

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

在用户模型上,我有

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

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

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

【问题讨论】:

  • 我认为 Laravel 没有为你提供任何解决方案。我会重新考虑你的关系,使用简单的父母对孩子的多对多关系,而不是两个一对多的关系。如果您想将父母描述为父亲,请在数据透视表/中间表中进行。

标签: laravel laravel-5 model relationships


【解决方案1】:

有一种方法,但您通常不会使用它来“检查”是否存在相关模型。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 2016-03-08
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2017-03-04
    • 2013-10-31
    • 2016-11-21
    • 2016-10-09
    相关资源
    最近更新 更多