Laravel Отношения с ИЛИ case - PullRequest
0 голосов
/ 28 июня 2018

Предположим, у меня есть модель User, а также у меня есть модель Couple, которая формируется из 2 пользователей, father_id и mother_id, которые по существу user_ids

На модели User, у меня есть

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

Однако я хочу проверить, является ли user_id либо father_id, либо mother_id, верните соответствующую модель Kid.

Есть ли способ достичь этого с помощью одного отношения? Как правильно обрабатывать этот сценарий, чтобы я мог использовать $user->kids, который будет проверять оба случая?

1 Ответ

0 голосов
/ 28 июня 2018

Есть способ, но вы обычно не используете его, чтобы «проверить», есть ли связанные модели.

Если у вас есть поле, которое определяет, представляет ли модель отца или мать, например, is_father, вы можете сделать:

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

По сути, метод отношений ДОЛЖЕН возвращать экземпляр отношения. Но вы можете сделать логику, прежде чем вернуть это.

ПРИМЕЧАНИЕ: Отношение кэшируется, поэтому даже если значение is_father изменится в том же потоке, оно будет использовать то же отношение, что и раньше. Это может привести к нежелательным ошибкам.

...