У меня есть сущность User, и я пытаюсь присоединить ее к многим пользовательским отношениям с UserGroup. Это работает нормально, но я пытаюсь отфильтровать объединенные объекты, потому что я использую, например, поле softdelete.
class User
{
// ...
/**
* @ORM\ManyToMany(targetEntity="\UserBundle\Entity\UserGroup")
* @ORM\JoinTable(name="users_groups",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
public function getGroups()
{
return $this->groups->matching(Criteria::create()->where(Criteria::expr()->isNull('te.deleted_at')));
}
// ...
}
Проблема: если критерий содержит какое-либо значение NULL, доктрина не использует его для запроса SQL. Это означает, что в этом примере инструкция SELECT не содержит никаких «удаленных_И IS НУЛЬ», где.
Я нашел причину, потому что доктрина фильтрует ее в SqlValueVisitor.php
if (($operator === Comparison::EQ || $operator === Comparison::IS) && $value === null) {
return;
} else if ($operator === Comparison::NEQ && $value === null) {
return;
}
Хорошо, но как решить эту проблему? Или, если я использую doctrine2, я не могу отфильтровать пустые поля?
Я знаю, я могу использовать доктринальные фильтры, но я не хочу, потому что в моем случае (и в этом примере) все просто, но я строю этот фильтр из кода динамически.