Как организовать иерархию моделей в Eloquent?

Работал раньше с Doctrine ORM - там всё было очевидно: создаёшь классы сущностей (с наследованием от базового класса, без - нет разницы) - потом автоматически синхронизируешь их с таблицами (каждому не абстрактному классу - своя таблица).
В Eloquent же ничего не понятно: для каждой таблицы создаётся миграция, таблица определяет модель (в модели мы свойства вообще не прописываем). А что если у меня две модели Pages и Articles, которые имеют общие свойства, которые я хочу вынести в базовую абстрактную модель Entry? При этом я хочу иметь две таблицы: Pages и Articles, идентичные поля которых потом не нужно будет править по отдельности. Не нашел в документации, как это реализовать.
  • Вопрос задан
  • 457 просмотров
Решения вопроса 2
v_decadence
@v_decadence
Можно создать базовую модель, потом сделать 2 наследуемых от неё, каждая из которых будет использовать свою таблицу.
Либо вынести общий код в trait.
Ответ написан
Audiophile
@Audiophile Автор вопроса
Написал такое:

EntryBase.php
abstract class EntryBase extends Migration
{

    public function up(): void
    {
        Schema::create($this->getTableName(), function (Blueprint $table) {
            $table->increments('id');
            // добавляем другие поля

            $this->setColumns($table);
        });
    }

    abstract protected function setColumns(Blueprint $table);

    abstract protected function getTableName(): string;


    public function down()
    {
        Schema::dropIfExists($this->getTableName());
    }

}


В реализациях методов добавляются дополнительные колумны и задаётся имя таблицы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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