我有一个用户实体,我尝试加入与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')));
}
// ...
}
问题:如果条件包含任何空值,则该原则不会将其用于sql查询。这意味着,在这个例子中,SELECT语句不会在其中包含任何“deleted_at IS NULL”。
我找到了原因,因为doctrine在SqlValueVisitor.php中过滤了它
if (($operator === Comparison::EQ || $operator === Comparison::IS) && $value === null) {
return;
} else if ($operator === Comparison::NEQ && $value === null) {
return;
}
好的,但这个问题的解决方案是什么?或者,如果我使用doctrine2,我无法过滤空字段?
我知道,我可以使用doctrine过滤器,但我不想要,因为在我的情况下(在这个例子中)它很简单,但我从代码dinamicly构建这个过滤器。
答案 0 :(得分:0)
你可以尝试
public function getGroups()
{
return $this->groups->matching(Criteria::create()->where(Criteria::expr()->neq('deleted_at', null)));
}