Автоматически отфильтровывать строки, которые не соответствуют условию в Doctrine

У меня уже есть база данных, и я не могу ее изменить. В этой базе данных я использую «мягкое удаление»: вместо фактического удаления записи я просто изменяю флаг (например, устанавливая del=1).

Я не использую шаблон GEDMO (SoftDelete), но мне нужна такая же функциональность. В настоящее время, когда я использую функции QueryBuilder/find, они возвращают записи с del=1. Та же идея о функциях ассоциаций; Я должен каждый раз проверять, если del=0.

Есть ли способ автоматически отфильтровывать записи с флагом del=1, если это явно не запрошено?


person Raisin    schedule 06.03.2015    source источник
comment
Я только что немного подправил вашу грамматику и, надеюсь, сделал вопрос более понятным. Пожалуйста, перейдите в редактирование, если я сделал что-то неправильное. Я также попытался сделать заголовок более конкретным, снова отредактируйте его, если необходимо.   -  person Duncan Jones    schedule 06.03.2015


Ответы (2)



Другая перспектива состоит в том, чтобы сделать ваш код более читабельным и, возможно, более простым, выполнив что-то вроде этого:

$entity = $em->getRepository("MyBundle:Entity")->findBy(['del' => 0]);

Это добавляет очень мало кода и любому читателю очевидно, чем вы занимаетесь.

Редактировать

В качестве альтернативы, если позволяют ваша база данных и привилегии (например, root в MySQL), вы можете создать представление, содержащее только del=0 записей. Для MySQL это документ CREATE VIEW. Доктрина разрешает использование взглядов.

person geoB    schedule 06.03.2015