Можно ли создать единый объект из базы данных с помощью консольного инструмента Symfony2?
В середине кодирования мне пришлось добавить таблицу и внести изменения в существующие классы сущностей. Поэтому я не хочу, чтобы все мои сущности возродились.
Любые предложения будут оценены!
У меня была та же проблема, вы должны сделать так:
php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Yourtablename"
затем
php app/console doctrine:mapping:import AppMyBundle \ metadata_format --filter="Yourtablename"
Где metadata_format
– это файл, который вы хотите сгенерировать (например, xml, yml, аннотация)
И наконец
php app/console doctrine:generate:entities AppMyBundle --no-backup
Подобно этой доктрине будет загружаться только сущность, в которой вы нуждаетесь. Просто будьте осторожны на фильтре, вы должны использовать CamelCase!
Надеюсь, что это поможет вам
Для третьей команды доктрина продолжала восстанавливать все файлы Entity. Добавив имя объекта после пакета, он создал только объект, который меня интересовал.
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Простое рабочее решение для аннотации параметров Symfony 2.7 и для [/ xml / yml] см. http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
сделать 3 команды в 3 этапа:
$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
( ПРИМЕЧАНИЕ. Если ваше имя базы данных является my_meeting
вам нужно будет изменить его на MyMeeting
в filter="MyMeeting"
для доктрины, чтобы найти имя вашей таблицы. Это потому, что доктрина всегда будет filter="MyMeeting"
подчеркивания и добавлять filter="MyMeeting"
к вашему имени таблицы. нет, вы получите эту ошибку: «В базе данных нет информации о сопоставлении» .)
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
( ПРИМЕЧАНИЕ: убедитесь, что у вас есть namespace AppBundle\Entity;
как namespace AppBundle\Entity;
ниже в файле класса Meeting.php следующим образом:
<?php /** * Created by PhpStorm. * User: * Date: 03-Sep-2015 * Time: 3:23 PM */ namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM;
Если не добавить его.)
где:
Чтобы быть уверенным, проверьте этот каталог:
ЦСИ \ AppBundle / Ресурсы / конфигурации / Доктрина / Meeting.orm.xml
И УБЕДИТЕСЬ, что у вас есть только .xml-файлы для таблицы, в которой вы хотите создать файлы классов сущностей, а другие нет. Затем запустите эту команду ниже, чтобы создать методы get и set для вашего класса сущности, который вы создали ранее
$ php app / console doctrine: generate: entity AppBundle: Meeting –no-backup
ПРИМЕЧАНИЕ 2. В качестве последнего шага вы должны удалить xml-доктрину orm db-файла, например, src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml
Это работает очень хорошо для меня.
Для объяснения читайте: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Комментарий @ fyrye, который в настоящее время скрыт, заслуживает кредита, хотел добавить это, чтобы его не пропустили другие. Это подход:
/** @var \Doctrine\DBAL\Connection $connection */ $config = $connection->getConfiguration(); // for excluding an specific table $config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/');
источник: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with
У меня возникли проблемы при запуске следующей команды из-за большого количества плохо определенных устаревших таблиц
php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/
Оказывается, флаг -filter фильтрует только ПОСЛЕ того, как он прочитал метаданные из всех ваших таблиц, которые, если у них нет первичных ключей или есть какая-то другая проблема,
Я бы оставил это как комментарий к принятому ответу, но я новичок.
Для таких, как я, у которых были проблемы с переключателем -filter, отображающим несколько таблиц с совпадающими строками в именах, можно использовать шаблон.
Примеры имен таблиц:
Поставщик вендораКонтакт
php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="Vendor"
Эта команда преобразует обе таблицы, а не только Vendor. Если вам нужен только Vendor, а не VendorContact, используйте шаблон в файле –filter:
php app/console doctrine:mapping:convert metadata_format \ ./src/App/MyBundle/Resources/config/doctrine \ --from-database \ --filter="\bVendor\b"
Надеюсь, что кто-то поможет!
Прекрасно работает с Symfony 3.
Если вы получаете «Нет классов метаданных для обработки». сообщение попытайтесь преобразовать ваше имя-tablename в оболочку верблюда Doctrine в параметре фильтра.
«my_table_name» должно быть записано как «MyTableName».
У меня была точно такая же проблема с Symfony 2.4 и MySQL.
Ни один из обходных решений, опубликованных выше, не работал для меня.
Я закончил создание новой базы данных с таблицами, которые я хочу извлечь (это может быть легко сделать, потому что MySQL предоставляет сценарий создания).
Затем изменил соединение с этой новой базой данных и выполнил команду извлечения сущности оттуда.
Кажется, это немного радикально, но я не буду создавать объекты вручную.
надеюсь, это поможет
Ни один из ответов не был подходящим для меня, используя Symfony 3 . Я закончил:
php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable" php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable" php bin/console doctrine:generate:entities MyBundle:MyTable --path ./src
Не работает ни одно из них для моего symfony 3.3. Поэтому я просто создал копию каталога и повторно сгенерировал все сущности в каталоге копирования. Затем я скопировал требуемые объекты в моем исходном каталоге.
-filter не работает из-за этой проблемы. https://github.com/symfony/symfony/issues/7717