私はドクトリンでこの問題に直面していますが、私の周りの誰も私を助けてくれません。だから私はここの誰かがそれを知っていることを望んでいました:
私は次の構造で作業しています:
エンティティ: MLT
/**
* @Entity
*/
class MLT
{
/**
* @OneToMany(targetEntity="\WAD\Common\LT", cascade={"remove"}, mappedBy="term")
*/
private $languageTerms;
}
エンティティ: LT
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"lttext" = "LTText", "ltstring" = "LTString"})
*/
abstract class LT {
/**
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
...
}
次に、LTString と LTText という同じ種類のエンティティが 2 つあります。
エンティティ: LTText
/**
* @Entity
*/
class LTText extends LT {
/**
* @Column(type="text")
*/
private $value;
}
エンティティ: LTString
/**
* @Entity
*/
class LTText extends LT {
/**
* @Column(type="string")
*/
private $value;
}
今私の問題:
次の結合を作成しています。
$qb = $em->createQueryBuilder();
$qb->select('naam')
->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
->leftjoin('naam.languageTerms','lts') //these are the LT's
->orwhere($qb->expr()->like('lts.value',"'%".$word."%'"));
その最後の行が私に問題を引き起こしています。lts に値フィールドがないというエラーが表示されます。サブクラスがそれを持っているので、これは一種の真実です。しかし、クエリにサブクラスを自動的に含めるにはどうすればよいですか?