Подтвердить что ты не робот

Создание единого объекта из существующей базы данных с помощью symfony2 и доктрины

Можно ли создать единый объект из базы данных с помощью консольного инструмента Symfony2?

В середине кодирования мне пришлось добавить таблицу и внести изменения в существующие классы сущностей. Поэтому я не хочу, чтобы все мои сущности возродились.

Любые предложения будут оценены!

4b9b3361

Ответ 1

У меня была та же проблема, вы должны сделать так:

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!

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

Ответ 2

Для третьей команды доктрина продолжала восстанавливать все файлы Entity. Добавив имя объекта после пакета, он создал только объект, который меня интересовал.

php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup

Ответ 3

Простое рабочее решение для аннотации параметров 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" для доктрины, чтобы найти имя вашей таблицы. Это потому, что доктрина всегда будет подчеркивает и добавляет кейл-кейл к вашему имени таблицы. Если нет, вы получите эту ошибку: "В базе данных нет информации о сопоставлении".)

$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"

( ПРИМЕЧАНИЕ: убедитесь, что у вас есть 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 - это именно ваш "AppBundle" в Symfony 2.7
  • Встреча - целевая таблица (чувствительная к верблюду)

УБЕДИТЕСЬ, проверьте этот каталог:

ЦСИ\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

Ответ 4

Комментарий @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 фильтрует только ПОСЛЕ того, как он считывает метаданные из всех ваших таблиц, которые, если у них нет первичных ключей или есть какая-то другая проблема, приведут к сбою команды

Ответ 5

Ни один из ответов не подходит для меня, используя 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

Ответ 6

Я бы оставил это как комментарий к принятому ответу, но я новичок.

Для таких, как я, у которых были проблемы с переключателем -filter, отображающим несколько таблиц с совпадающими строками в именах, можно использовать шаблон.

Примеры имен таблиц:

Vendor VendorContact

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"

Надеюсь, что это поможет кому-то!

Ответ 7

Хорошо работает с Symfony 3.

Если вы получаете "Нет классов метаданных для обработки". сообщение попытайтесь преобразовать ваше имя в кадр верблюда в доктрине фильтра в параметре фильтра.

"my_table_name" необходимо записать как "MyTableName".

Ответ 8

У меня была точно такая же проблема с Symfony 2.4 и MySQL.

Ни один из обходных решений, опубликованных выше, не работал у меня.

В итоге я создал новую базу данных с таблицами, которые я хочу извлечь (это может быть легко сделать, потому что MySQL обеспечивает создание script).

Затем изменилось соединение с этой новой базой данных и выполнило команду извлечения сущности оттуда.

Кажется, это немного радикально, но я не буду создавать объекты вручную.

Надеюсь, что поможет

Ответ 9

Не работает ни одно из них для моего symfony 3.3. Поэтому я просто создал копию каталога и повторно сгенерировал все сущности в каталоге копирования. Затем я скопировал требуемые объекты в моем исходном каталоге.

- фильтр не работает из-за этой проблемы https://github.com/symfony/symfony/issues/7717

Ответ 10

для Symfony 3

Для генерации сущностей для новой таблицы "Группа"

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group

enter image description here

как написано в документации Symfony 3