Laravel 与 OR 案例的关系
Laravel Relationship with OR case
假设我有一个 User 模型,还有 Couple 模型,它由 2 个用户组成,father_id
和 mother_id
本质上是 user_ids
在用户模型上,我有
public function kids() {
return $this->hasMany('App\Kid', 'father_id');
}
但是,我想检查 user_id
是 father_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 值在同一个线程 运行 中发生变化,它也会利用与它以前做过。这可能会导致不需要的错误。
假设我有一个 User 模型,还有 Couple 模型,它由 2 个用户组成,father_id
和 mother_id
本质上是 user_ids
在用户模型上,我有
public function kids() {
return $this->hasMany('App\Kid', 'father_id');
}
但是,我想检查 user_id
是 father_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 值在同一个线程 运行 中发生变化,它也会利用与它以前做过。这可能会导致不需要的错误。