#php #symfony
#php #symfony
Вопрос:
Я хочу временно отключить softdelete, чтобы я мог находить удаленные объекты по идентификатору, а затем действительно удалять их в своих модульных тестах (чтобы убедиться, что я не засоряю базу данных).
Что я пробовал:
$this->em->getFilters()->disable('softdeletable');
$item = $repository->findOneById($id); //fetch the item which was soft-deleted
$this->em->remove($item);
$this->em->flush();
Но это выдает ошибку:
InvalidArgumentException : Filter 'softdeletable' is not enabled.
Я также пробовал отключить (‘soft-deletable’) и отключить (‘soft-deleteable’) и т. Д. — Ничего не сработало. Но когда я смотрю на $this->em->getFilters(), фильтр ЕСТЬ:
["enabledFilters"]=>
array(1) {
["softdeletable"]=>
string(48) "GedmoSoftDeleteableFilterSoftDeleteableFilter"
}
Попытка кода без отключения, конечно, тоже не работает:
DoctrineORMORMInvalidArgumentException : EntityManager#remove() expects parameter 1 to be an entity object, NULL given.
Что я делаю не так? Я знаю, что я действительно могу что-то удалить, установив значение deletedAt в новое DateTime, но как мне удалить элемент, не извлекая его сначала?
Спасибо за вашу помощь!
Комментарии:
1. Вы используете это в цикле или что-то в этом роде? Если это так, возможно, фильтр уже отключен. Вы могли бы проверить, включен ли он, прежде чем отключать использование
if ($this->em->getFilters()->isEnabled('softdeleteable'))...
2. @Chi не могли бы вы попробовать
$filters = $this->getContainer()->get('doctrine')->getEntityManager()->getFilters(); $filters->disable('softdeleteable');
и сказать мне, есть ли у вас ошибка?3. не могли бы вы предоставить здесь ответ, который может получить принятый?
4. @lolmx опубликуйте это как ответ 😉
Ответ №1:
Изначально комментарий….
Вы используете это в цикле или что-то в этом роде?
Если это так, возможно, фильтр уже отключен.
Вы могли бы проверить, включен ли он, прежде чем отключать использование, если хотите…
$this->em->getFilters()->isEnabled('softdeleteable'))...