Я думаю, что вы ищете полиморфное отношение.Вместо того, чтобы иметь модель, которая может быть одним из двух «типов», вероятно, должны быть две отдельные модели в одном и том же отношении.Например:
class Post
{
public function Show()
{
return $this->morphTo();
}
}
class TvShow
{
public function Post()
{
return $this->morphMany('App\Post', 'show');
}
}
class Movie
{
public function Post()
{
return $this->morphMany('App\Post', 'show');
}
}
Тогда ваша таблица сообщений будет иметь поля show_id
и show_type
, которые будут относиться либо к телешоу, либо к фильму.Проверьте документы для получения дополнительной информации, я не уверен в остальной части вашего проекта, так что я не на 100% подойдет, но каждый раз, когда вы начинаете добавлять поля «_type» в вашу таблицу, вы должны задаться вопросом, следует ли вам это делатьиспользуя полиморфное отношение.Это также, вероятно, сделает ваши модели более чистыми и свободными от множества утверждений if, поскольку вы понимаете, что есть другие различия между фильмами и шоу и тем, как вы с ними справляетесь.
https://laravel.com/docs/5.7/eloquent-relationships#polymorphic-relations