У меня есть таблица "my_table" с некоторыми полями. Я хочу сгенерировать Entity в MyBundle, используя «my_table». Но я не хочу воссоздавать все сущности в MyBundle. Как я могу это сделать?
Как сгенерировать объект из существующей таблицы в symfony2?
Ответы (3)
Вот как вы можете это сделать,
Первый шаг: попросите Doctrine проанализировать базу данных и сгенерировать соответствующие файлы метаданных xml или yml.
php app/console doctrine:mapping:convert [xml|yml] Path/To/MyBundle/Resources/config/doctrine/metadata/orm --from-database --force --filter=MyTable
Второй шаг: попросите Doctrine импортировать схему и создать связанные классы сущностей, выполнив следующие две команды.
php app/console doctrine:mapping:import MyBundle [xml|yml|annotation] --filter=MyTable
php app/console doctrine:generate:entities Path\To\MyBundle\EntityFolder\\MyTable
Взгляните на раздел документации Как создавать сущности из существующей базы данных.
MyBundle:MyTable
вместо Path\To\MyBundle\EntityFolder\\MyTable
- person Nate; 15.03.2016
Простое рабочее решение для аннотации опции Symfony 2.7 и для [/xml/yml] см. http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
выполните 3 команды в 3 шага:
Команда №1:
$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
Выход:
запись C:\xampp\htdocs\localxyz\src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
Команда №2:
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
Выход:
Процессинговый объект "Встреча"
Экспорт информации о сопоставлении «аннотаций» в «C:\xampp\htdocs\localxyz\src\Entity»
Команда №3:
$ php app/console doctrine:generate:entities AppBundle:Meeting --no-backup
Выход:
Генерация сущности "AppBundle\Entity\Meeting", генерирующая AppBundle\Entity\Meeting
куда:
AppBundle — это именно ваш «AppBundle» в 2.7 symfony Meeting — это целевая таблица (с учетом регистра)
ЧТОБЫ УБЕДИТЬСЯ, проверьте этот каталог:
C:\xampp\htdocs\myproj\src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
C:\xampp\htdocs\myproj\src\AppBundle/Resources/config/doctrine/MeetingOriginal.orm.xml
И УБЕДИТЕСЬ, что у вас есть только файлы .xml для таблицы, в которой вы хотите создать файлы классов сущностей, и никаких других.
Это работает очень хорошо для меня.
Для пояснений прочитайте: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Хотя это старый пост, но если кто-то получит следующую ошибку,
Database does not have any mapping information.
Проверять
Если имя вашей таблицы blog_post
, то в параметре фильтра используйте BlogPost
, а не blog_post
Ссылка: https://stackoverflow.com/a/27019561/6504104
хотя это описано в ответах выше, но я пропустил это и получил эту ошибку
Поэтому я хотел сделать это явным
Также в symfony >= 3.4 это php bin/console
например.
php bin/console doctrine:mapping:import --force AppBundle xml --filter="BlogPost"
а потом
php bin/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="BlogPost"
Спасибо...