アカウントと呼ばれる関連エンティティのプロパティに基づいて、「クライアント」エンティティのリストをフィルタリングしようとしています。問題は、Account エンティティは単なる基本クラスであり、フィルタリングの実際のプロパティは子エンティティ (PersonalAccount および EnterpriseAccount) に存在しますが、doctrine では Account 基本クラスのプロパティにしかアクセスできないことです。
要約すると、ここに私の状況があります:
クライアント エンティティ:
class Client
{
/** @ORM\OneToMany(targetEntity="Account", mappedBy="client") */
protected $accounts;
}
ベース Account エンティティ:
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 クラスのプロパティを使用して Client エンティティをフィルター処理するにはどうすればよいですか?