我正在尝试根据名为 Account 的关联实体的属性过滤“客户”实体列表。问题是 Account 实体它只是一个基类,用于过滤的实际属性存在于它们的子实体(PersonalAccount 和 EnterpriseAccount)中,但原则只允许我访问 Account 基类的属性。
总结一下,这是我的情况:
客户实体:
class Client
{
/** @ORM\OneToMany(targetEntity="Account", mappedBy="client") */
protected $accounts;
}
基本帐户实体:
class Account
{
/** @ORM\ManyToOne(targetEntity="Client", inversedBy="accounts") */
protected $client;
}
PersonalAccount 实体(Account 的子实体)
class PersonalAccount extends Account
{
/** @ORM\Column() */
protected $name;
}
在我的控制器中,我尝试了:
$qb = $em->getRepository('MyBundle:Client')->createQueryBuilder('cl');
$query = $qb->select('cl')
->innerJoin('cl.accounts', 'acc')
->where('acc.name = :name')
->setParameter('name', 'Jhon')
->getQuery();
但它会引发异常,因为基类 Account 没有名为“name”的属性。
如何使用继承的 PersonalAccount 类的属性过滤客户端实体?