Задать вопрос
@snake2
Сразу пишу legacy код

Как использовать разные relation?

Мне надо если в поле type 1 использовал relation
return $this->hasOne(User::class, 'id', 'user_id');

если type 2 использовал relation
return $this->hasOne(Client::class, 'id', 'user_id');

Как это можно сделать?
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
iMedved2009
@iMedved2009
Не люблю людей
Polymorphic Relationships

А так вообще стоит вернуться к проектированию бд и сделать что бы одинаковые сущности хранились в одной таблице.
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
Либо использовать полиморфные отношения целиком (с колонкой user_type типа string с названием модели) https://laravel.com/docs/8.x/eloquent-relationship... , либо два разных отношения.
Теоретически может прокатить enforceMorphMap но я не проболвал.
Еще есть какие-то https://laravel.com/docs/8.x/eloquent-relationship... но про них пишут, что они не рекомендуются
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kandrash
Кратко о себе
И где проблема?

if ($request->input('type') === 'user') {
    return User::with('user')->get();
} else {
    return User::with('client')->get();
}


Попытки динамической связи в модели вам не нужны, это бред, вы что-то не так делаете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы