2016-06-26 2 views
1

Я хочу получить подробную информацию о рекомендуемом рабочем процессе для Yii. Представьте, что у вас уже есть база данных и какая-то модель для нее. И в один прекрасный день вам нужно добавить новое поле в модель. В Django вы можете просто изменить файл models.py, а затем запустить manage.py makemigrations & & manage.py migrate - он будет анализировать изменения, создавать файл миграции и применять изменения в базе данных. Но что я должен делать в Yii?Миграции + изменение модели в Yii

Я вижу только после пути из документации и руководств:

  1. Создать пустую миграцию
  2. Попробовать написать необходимые изменения в синтаксисе Yii-миграции (это может быть не столь очевидно для изменения столбца и добавления иностранного ключи, сложнее, чем просто писать SQL-запросы).
  3. Запуск yiic migrate
  4. Сгенерируйте код модели с помощью Gii для новой структуры базы данных и скопируйте новые поля в существующий файл модели.

С моей точки зрения, это приводит к большим бесполезной работы путем создания миграции в дополнение к модификации модели. Таким образом, вместо того, чтобы просто модифицировать модель, как в Django, я должен использовать странный синтаксис миграции в Yii, а затем модифицировать модель вручную. Это действительно так, как он должен работать? Невозможно ли это как-то упростить?

ответ

1

Я использую ниже подход для как 5-6 месяца и его работа совершенно:

  1. создать новую папку внутри имя папки моделей сущностей.
  2. генерировать все модели, вам нужно с помощью Gii и

generate all models you need using gii

а) в модельном поле Пути использовать новую папку «объекты» вместо папки моделей

б) в поле класса модели, добавить «Entity» в качестве имени модели postfix

  1. теперь в папке моделей, создайте новый класс PHP и назвали его, например, «Gift», и расширяет его с «GiftEntity»
  2. добавить новую папку, «сущности» в предварительно загруженные классы.

Теперь, когда вы делаете новую миграцию и меняете свои модели в db, используйте gii для регенерации ваших моделей сущностей «GiftEntity», и все ваши коды в расширенной модели «Подарок» не тронуты.

+0

Скорее всего, мне нужно будет добавить некоторые методы, работающие с новым полем (если я добавлю новое поле) к модели, поэтому он не будет «нетронутым». Но все-таки, спасибо за идею, есть в этом какой-то момент. –

Смежные вопросы