关于抽象实体

时间:2018-05-17 11:31:04

标签: php doctrine-orm doctrine symfony4

我有一个抽象实体,它由两个子类继承。我正在与其他实体联合使用它,现在我想创建条件来过滤掉属性设置为某个值的对象。

我的超类:

/**
 * @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查询,所以我宁愿让这个解决使用过的标准。

0 个答案:

没有答案