Модель с полимолиморфным отношением «один ко многим» и простым отношением «один ко многим»

Я использую ларавель 5.7. У меня сейчас ситуация, когда у меня есть Fight модель со структурой user_id, fightable_id у меня есть еще две таблицы users и monsters. поэтому users_id относится к пользователям (у пользователя может быть много боев), а fightable_id может относиться либо к user, либо к monster (таблице монстров). поэтому я должен определить функции для корабля отношений

для пользовательской модели я должен сделать

1.для полиморфных отношений один ко многим

public function fights()
{
    return $this->morphMany('App\Fight', 'fightable');
}

2.для простых отношений один ко многим

 public function fights()
    {
        return $this->hasMany('App\Fight');
    }

Я сейчас в замешательстве. Конечно, единственный способ - изменить имя функции. но я буду поступать правильно, правильно меняя имена функций (поскольку обе функции имеют одинаковое имя). или я что-то не так делаю?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
42
1

Ответы 1

Я не уверен, что полностью понял ваш вопрос, но я постараюсь!

Также этот пост действительно поможет вам понять проблему, с которой вы столкнулись, я думаю, Отношение морфинга Laravel

Использование кода из сообщения, на которое я ссылался, но использование ваших таблиц приведет к созданию моделей, определенных следующим образом.

Модель пользователя

class User extends Model
{
  public function fights()
  {
    return $this->hasMany('App\Fight');
  }
}

Боевая модель

class Fight extends Model
{
  public function user()
  {
    return $this->belongsTo('App\User');
  }

  public function fightable()
  {
    return $this->morphTo();
  }
}

Модель монстра

class Monster extends Model
{
  public function fight()
  {
    return $this->morphOne('App\Fight', 'fightable');
  }
}

Если вы все еще чувствуете, что это не ответило на ваш вопрос или вам нужна дополнительная помощь, просто дайте мне знать!

Другие вопросы по теме