我試圖根據名爲Account的關聯實體的屬性過濾「客戶」實體列表。問題是Account實體只是一個基類,過濾的實際屬性存在於它們的子實體(PersonalAccount和EnterpriseAccount)中,但是Doctrine只讓我訪問Account基類的屬性。Symfony2 + Doctrine2:根據繼承關係的屬性過濾實體
總之,這裏是我的情況:
客戶實體:
class Client
{
/** @ORM\OneToMany(targetEntity="Account", mappedBy="client") */
protected $accounts;
}
的基本帳戶實體:
class Account
{
/** @ORM\ManyToOne(targetEntity="Client", inversedBy="accounts") */
protected $client;
}
PersonalAccount實體(帳戶兒童)
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類的屬性過濾客戶端實體?
這就是我一直在尋找的!事實上,我在代碼中有必要的繼承註釋,但是我並沒有在這個例子中寫出它,只是爲了儘量減少代碼。非常感謝你。 –