2015-08-28 4 views
5

Если я бегSymfony2 схема обновления доктрины от конкретного объекта

php app/console doctrine:schema:update --force 

Я буду обновлять свою базу данных от всех субъектов.

Мне нужна обновленная база данных только для пользовательского объекта, что такое решение?

Один из раствора определяет пользовательский менеджер сущности и когда передача Того объекта менеджер

php app/console doctrine:schema:update --force --em="custom" 

Но, возможно, что-то exisgts быстрее без definig диспетчера сущностея?

ответ

9

В соответствии с командной документацией такой опции нет. Если это то, что вам нужно сделать только один раз, я бы предложил использовать опцию --dump-sql для получения необходимых инструкций SQL и вручную запустить те, которые вам нужны.

P.S. Я не понимаю, в чем причина только обновить схему для объекта и оставить все остальные объекты не синхронизированными с базой данных. Это похоже на рецепт получения ошибок db.

+3

В настоящее время я в такой ситуации (и так как вам интересно, почему кто-то захочет это сделать). У меня есть БД из очень старой старой системы, которая была очень плохо сделана. И меня попросят вывести определенные сущности при определенных условиях. Мне становится проще иметь доктрину карту для части сущностей, чтобы делать сравнения, а не самим запутывать запросы (это имеет смысл?) Поэтому я хочу добавить одну сущность, которая поможет мне сравнить данные, но я не хочу запустить массовое обновление на всей db, которое может рисковать удалением информации. –

+0

@JoeYahchouchi да, это имеет смысл. Если я правильно понимаю, у вас есть объект Doctrine, частично сопоставленный с базой данных, поскольку это помогает записать ваш код, но вы не хотите автоматически синхронизировать определение сущности с табличной структурой, потому что в таблице есть другие поля. Тогда это решение имеет смысл. Совершенно другим способом было бы использовать [миграции] (http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html), но это не совсем то, о чем попросил ОП. –

+0

Да, именно это моя ситуация, частично сопоставленная сущность. Я закончил вручную добавление столбцов и таблиц и хотел и исходил оттуда. Миграции работали бы, если бы у меня возникли повторяющиеся сценарии. –

0

Вы можете вручную использовать класс Doctrine SchemaTool для генерации SQL diff, основанного только на одном объекте. Вам понадобится доступ к EntityManager Doctrine - приведенный ниже пример предполагает доступ к контейнеру Symfony.

use Doctrine\ORM\Tools\SchemaTool; 

$em = $this->container->get('doctrine')->getManager(); 
$schemaTool = new SchemaTool($em); 
$metadata = $em->getClassMetadata(YourEntity::class); 
$sqlDiff = $schemaTool->getUpdateSchemaSql([$metadata], true); 

Переменная $sqlDiff теперь будет содержать массив операторов SQL, которые необходимы для приведения схемы базы данных в актуальном состоянии с вашим отображением объекта.

Второй аргумент, переданный SchemaTool::getUpdateSchemaSql(), важен - без него поведение по умолчанию должно было бы генерировать операторы DROP TABLE для каждой другой таблицы, которая появляется в вашей базе данных.

Смежные вопросы