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



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



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



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

746   9  

9 ответов:

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

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 !

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

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

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

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

(Примечание: убедившись, что у вас есть namespace AppBundle\Entity; в папке встреча.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
  • встреча-это целевая таблица (Camel-Case чувствительный)

чтобы быть уверенным, проверьте этот каталог:

src\AppBundle / Resources/config/doctrine / Meeting.ОЗР.xml

и убедившись, что у вас есть только .xml-файлы для таблицы, которую вы хотите создать файлы класса сущностей, и никакие другие. Затем выполните следующую команду, чтобы сгенерировать get и set методы для вашего класса сущностей, который вы создали ранее

$ php app/console doctrine: generate: entities AppBundle: Meeting --нет-резервное копирование

примечание 2: В качестве последнего шага вы должны удалить файл XML doctrine 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 switch, отображающим несколько таблиц с совпадающими строками в именах, можно использовать шаблон.

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

поставщик VendorContact

php app/console doctrine:mapping:convert metadata_format \
    ./src/App/MyBundle/Resources/config/doctrine \
    --from-database \
    --filter="Vendor"

эта команда преобразует обе таблицы, а не только поставщика. Если вы хотите только поставщика, а не VendorContact, используйте шаблон в --фильтр:

php app/console doctrine:mapping:convert metadata_format \
    ./src/App/MyBundle/Resources/config/doctrine \
    --from-database \
    --filter="\bVendor\b"

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

отлично работает с Symfony 3 тоже.

Если вы получаете "нет классов метаданных для обработки."сообщение попробуйте преобразовать имя таблицы в доктрину camel casing в параметре filter.

"my_table_name "должен быть записан как"MyTableName".

ни один из ответов не был совершенно правильным для меня с помощью 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 2.4 и MySQL.

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

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

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

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

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

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

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

Comments

    Ничего не найдено.