Как сгенерировать сущности из представления базы данных с помощью doctrine и symfony2 - PullRequest
9 голосов
/ 23 марта 2012

Я пытаюсь сгенерировать сущности из базы данных, используя стандартные консольные команды, как описано в документации Symfony2 здесь: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html.

php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm"
php app/console doctrine:mapping:import MyHomeBundle yml
php app/console doctrine:generate:entities MyHomeBundle

После этого все таблицы генерируются правильно.Проблема в том, что это не будет генерировать сущности для представлений базы данных.Когда я сам добавляю файлы yml в src / My / HomeBundle / Resources / config / doctrine / metadata / orm, например:

UserInGroup:
  type: entity
  table: user_in_group_view
  fields:
    id:
      id: true
      type: integer
      unsigned: false
      nullable: false
      generator:
        strategy: IDENTITY
    userId:
      type: integer
      unsigned: false
      nullable: false
      column: user_id
    userGroupId:
      type: integer
      unsigned: false
      nullable: false
      column: user_group_id
  lifecycleCallbacks: {  }

, я получаю это исключение при запуске php app/console doctrine:generate:entities MyHomeBundle:

Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121

Аналогичный вопрос был опубликован здесь: Как настроить сущность (доктрину) для представления базы данных в Symfony 2

Я знаю, что могу создать класс сущностей, но я надеялся, что смогусгенерировать это, поэтому, если я изменю свое мнение, я могу просто восстановить классы сущностей.Есть предложения?

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Теперь вы создаете только свои файлы orm.Вам нужно выполнить еще 2 шага.Я дам вам полные шаги с самого начала.

Перед этим удалите все файлы yml в каталоге orm, который вы создали ранее.

Надеюсь, MyHomeBundle - это имя вашего пакета

1).php app/console doctrine:mapping:convert yml ./src/My/HomeBundle/Resources/config/doctrine --from-database --force 

  Symfony2 generate entity from Database

 2).php app/console doctrine:mapping:import MyHomeBundle yml

 3).php app/console doctrine:generate:entities MyHomeBundle

Надеюсь, это поможет вам.

0 голосов
/ 13 апреля 2012

Как вы можете видеть здесь: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html процесс обратного инжиниринга от дБ к сущности еще не полностью реализован:

"Как сказано в документации к инструментам Doctrine, обратный инжиниринг - одноразовыйпроцесс начала работы над проектом. Doctrine может преобразовать приблизительно 70-80% необходимой информации о сопоставлении на основе полей, индексов и ограничений внешнего ключа. Doctrine не может обнаружить обратные ассоциации, типы наследования, объекты с внешними ключами в качестве первичныхключи или семантические операции с ассоциациями, такие как каскадные события или события жизненного цикла. После этого потребуется дополнительная работа с сгенерированными объектами для разработки каждого из них в соответствии с особенностями модели вашего домена. "

0 голосов
/ 30 марта 2012

Возникла та же проблема, я использую xml вместо yml, но должен быть таким же.

Проверьте в своей сущности orm, содержит ли имя правильный маршрут, например:

<entity name="Myapp\MyrBundle\Entity\MyEntity" table="myentity">

Потому что, когда я генерировал свою форму из базы данных, имя было таким:

<entity name="MyEntity" table="myentity">

Так что доктрина не поняла правильный путь.

Надеюсь, я ясна, и это поможет вам!

...