Как удалить таблицу с помощью Doctrine2 и Symfony2? Я создал объекты и обновил схему, теперь я хочу удалить эту структуру.
Удаление таблицы с помощью Doctrine2 и Symfony2
Ответы (4)
Не уверен, что правильно понял ваш вопрос. Вы удалили объект и хотите удалить также его сгенерированную таблицу из базы данных? Если так:
Вы не можете этого сделать, потому что Doctrine2 заботится только о таблицах, которые она знает, то есть о тех, которые представлены сущностями. Поскольку вы удалили какую-то сущность из своего приложения, Doctrine больше не считает, что таблица принадлежит вашему приложению. Бывают ситуации, когда в одной базе данных разные таблицы разных приложений. Было бы бессмысленно, если бы Doctrine удалила их только потому, что ничего о них не знает. Это было бы расизмом... но против столов.
Если вы просто хотите удалить таблицы программно, вы можете использовать необработанный запрос. Насколько мне известно, в Doctrine нет метода удаления таблиц. Или, как вариант, можно сделать это вручную.
Вы можете сделать необработанный sql.
Например, в контроллере Symfony2:
$em = $this->getDoctrine()->getManager();
$sql = 'DROP TABLE hereYourTableName;';
$connection = $em->getConnection();
$stmt = $connection->prepare($sql);
$stmt->execute();
$stmt->closeCursor();
Просто удалите таблицы, которые вы больше не используете, вручную... Doctrine полностью игнорирует несопоставленные таблицы.
В Doctrine 2.6.2 вы можете УДАЛИТЬ таблицу, удалив класс сущности, после миграции: diff вы получите новый файл с запросом УДАЛИТЬ ТАБЛИЦУ, а миграция: миграция выполнит команду, удаляющую нужную таблицу. Класс, который собирались удалить, имел отношения с другими сущностями, поэтому мне пришлось жестоко (вручную) удалить все упоминания о старом классе сущностей в других сущностях. Только что протестировано.