Лучшее использование моделей и миграция в Symfony - PullRequest
5 голосов
/ 26 января 2011

Эй. У меня проблемы с переносом изменений, которые я сделал в моем файле config / doctrine / schema.yml.

Я добавил столбец age в таблицу user . Затем я сделал php symfony doctrine:generate-migrations-diff с последующим php symfony doctrine:migrate .

Глядя в мою базу данных, теперь добавляется столбец age без удаления каких-либо данных.

Но мой /lib/model/doctrine/base/BaseUser.class.php не изменился, нет поля или функций age для age . Поэтому я также выполнил команду php symfony doctrine:build-model . Наконец модель также обновлена ​​/ перенесена.

Так что мне интересно, это единственный способ? Похоже, много работы, и я боюсь пропустить что-то каждый раз, делая это.

Могу ли я зайти прямо в phpmyadmin, добавить туда изменения в базе данных и просто сделать php symfony doctrine:build-schema , и таким образом пропустить часть миграции (две команды).

Также, когда дело доходит до использования моделей, я прав, что /lib/model/doctrine/User.class.php - это место, где я могу создавать функции и тому подобное для моего пользователя "класс данных"? Мол, сделать функцию isFemale . Если нет, то где будет эта функция?

Это может быть плохой вопрос, но почему уровень модели находится внутри пути / lib / doctrine? Насколько я узнал, вы храните модули внутри приложений, где вы создаете свое представление и контроллер. Почему модель должна быть снаружи. Как это я могу сделать модели без подключенного контроллера и просмотра?

Спасибо.

1 Ответ

8 голосов
/ 26 января 2011

Почему модель должна быть снаружи

Поскольку модели могут использоваться везде в вашем проекте, например, в различных приложениях и модулях.

МожетЯ захожу прямо в phpmyadmin, добавляю туда изменения в базу данных и просто делаю доктрину php symfony: build-schema, и таким образом пропускаю часть миграции (две команды).

Конечно, вы можете,но миграции - это хороший подход для отслеживания вашей схемы при развертывании в рабочей среде или работе в команде.

Вот как я использую доктрины миграции (простой пример использования):

  1. Добавление столбцаage моей User модели в schema.yml
  2. ./symfony doctrine:generate-migrations-diff.Класс (ы) миграции сгенерирован.
  3. ./symfony doctrine:migrate.Столбец age успешно добавлен в таблицу.
  4. ./symfony doctrine:build --all-classes.Сборка форм / фильтров / моделей

Вот и все.Основная идея заключается в том, что doctrine:generate-migrations-diff class:

  1. Собирает информацию о структуре всех ваших моделей (php-представление schema.yml)
  2. Сравнивает ваши schema.yml и информацию из(1)
  3. Генерирует классы миграции на основе различий

Также, когда дело касается использования моделей, я прав, что /lib/model/doctrine/User.class.php, где я могу сделать функции и тому подобное для моего пользователя "класс данных"?Мол, создание функции isFemale.Если нет, то где будет такая функция?

Да, вы можете добавить такой метод в модель User, потому что она касается пользователей.

...