У меня есть абстрактная сущность, которая наследуется двумя подклассами. Я использую его в сочетании с другим объектом, и теперь я хочу создать критерии для фильтрации объектов со значением свойства, равным некоторому значению.
Мой суперкласс:
/**
* @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 Builder в настоящее время не поддерживает вашу схему наследования.
Проблема в том, что он пытается создать экземпляр AbstractAddress
вместо одного из подклассов соответственно.
Есть ли способ добиться этой фильтрации с помощью Criteria
API?
Я знаю, что вместо этого могу использовать filter()
, но эта функция не влияет на SQL-запрос, поэтому я предпочел бы использовать этот решенный используемый критерий.