我有一个抽象实体,它由两个子类继承。我正在与其他实体联合使用它,现在我想创建条件来过滤掉属性设置为某个值的对象。
我的超类:
/**
* @ORM\MappedSuperclass
* @ORM\Entity(repositoryClass="Foo\Bar\AddressRepository")
* @ORM\InheritanceType(value="SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator_type", type="string")
* @ORM\DiscriminatorMap({"homeaddress" = "HomeAddress", "companyaddress" = "CompanyAddress"})
*/
abstract class AbstractAddress
{
/**
* @var bool
* @ORM\Column(type="boolean", options={"default": 0})
*/
protected $active;
}
子类:
/**
* @ORM\Entity(repositoryClass="Foo\Bar\AddressRepository")
*/
class HomeAddress extends AbstractAddress
{
}
/**
* @ORM\Entity(repositoryClass="Foo\Bar\AddressRepository")
*/
class CompanyAddress extends AbstractAddress
{
}
有关联的实体:
/**
* @ORM\Entity(repositoryClass="Foo\Bar\CustomerRepository")
*/
class Customer
{
/**
* @var ArrayCollection
* @ORM\ManyToMany(targetEntity="Foo\Bar\AbstractAddress", cascade={"all"}, orphanRemoval=true)
*/
private $addresses;
/**
* @return Collection|null
*/
public function getAddresses(): ?Collection
{
return $this->addresses->matching(
Criteria::create()->where(Criteria::expr()->eq('active', true))
);
}
}
此设置产生异常:
ResultSetMapping构建器当前不支持您的继承方案。
问题是它试图分别实例化AbstractAddress
而不是其中一个子类。
有没有办法使用Criteria
API实现此过滤?
我知道我可以使用filter()
代替,但是这个函数不会影响SQL查询,所以我宁愿让这个解决使用过的标准。