Удаление таблицы с помощью Doctrine2 и Symfony2

Как удалить таблицу с помощью Doctrine2 и Symfony2? Я создал объекты и обновил схему, теперь я хочу удалить эту структуру.


person pamil    schedule 27.07.2012    source источник
comment
Я не понимаю вопроса.... Что вы хотите удалить? Также объекты класса?   -  person DonCallisto    schedule 27.07.2012


Ответы (4)


Не уверен, что правильно понял ваш вопрос. Вы удалили объект и хотите удалить также его сгенерированную таблицу из базы данных? Если так:

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

Если вы просто хотите удалить таблицы программно, вы можете использовать необработанный запрос. Насколько мне известно, в Doctrine нет метода удаления таблиц. Или, как вариант, можно сделать это вручную.

person Ondrej Slinták    schedule 27.07.2012
comment
На самом деле вы можете удалить таблицы с помощью консольной команды: stackoverflow.com/a/44952099/3409662 - person Sébastien; 06.07.2017
comment
Я думаю, ты имеешь в виду... tableist - person Johnny; 28.05.2021

Вы можете сделать необработанный sql.

Например, в контроллере Symfony2:

$em = $this->getDoctrine()->getManager();
$sql = 'DROP TABLE hereYourTableName;';
$connection = $em->getConnection();
$stmt = $connection->prepare($sql);
$stmt->execute();
$stmt->closeCursor();
person Hokusai    schedule 13.11.2013

Просто удалите таблицы, которые вы больше не используете, вручную... Doctrine полностью игнорирует несопоставленные таблицы.

person Lusitanian    schedule 27.07.2012

В Doctrine 2.6.2 вы можете УДАЛИТЬ таблицу, удалив класс сущности, после миграции: diff вы получите новый файл с запросом УДАЛИТЬ ТАБЛИЦУ, а миграция: миграция выполнит команду, удаляющую нужную таблицу. Класс, который собирались удалить, имел отношения с другими сущностями, поэтому мне пришлось жестоко (вручную) удалить все упоминания о старом классе сущностей в других сущностях. Только что протестировано.

person JohnyProkie    schedule 16.09.2018