Как сгенерировать объект из существующей таблицы в symfony2?

У меня есть таблица "my_table" с некоторыми полями. Я хочу сгенерировать Entity в MyBundle, используя «my_table». Но я не хочу воссоздавать все сущности в MyBundle. Как я могу это сделать?


person Alastor    schedule 15.11.2012    source источник
comment
symfony.com/doc/2.0/cookbook/doctrine/reverse_engineering.html   -  person Molecular Man    schedule 15.11.2012


Ответы (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

Взгляните на раздел документации Как создавать сущности из существующей базы данных.

person Ahmed Siouani    schedule 15.11.2012
comment
В последней команде я смог использовать ярлык 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

person Dung    schedule 14.08.2015
comment
Это будет работать для менеджера сущностей по умолчанию. Если вам нужно извлечь данные из другой базы данных, укажите следующий параметр --em = ENTITY MANGER NAME. - person Jignesh Rawal; 07.07.2017

Хотя это старый пост, но если кто-то получит следующую ошибку,

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"

Спасибо...

person Azhar Khattak    schedule 05.12.2017