1

私はドクトリンでこの問題に直面していますが、私の周りの誰も私を助けてくれません。だから私はここの誰かがそれを知っていることを望んでいました:

私は次の構造で作業しています:

エンティティ: 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 に値フィールドがないというエラーが表示されます。サブクラスがそれを持っているので、これは一種の真実です。しかし、クエリにサブクラスを自動的に含めるにはどうすればよいですか?

4

2 に答える 2

0

サブクエリを使用してこの問題を回避できることがわかりました。次のようなもの:

$qb->select('naam')
    ->from('\TBIT\Entities\Naam', 'naam') //this is the MLT
    ->where(
        'naam.languageTerms in (SELECT lts FROM [class] lts'
            .' WHERE ' . $qb->expr()->like('lts.value',"'%".$word."%'")
        .')'
    );
于 2014-07-10T10:44:51.640 に答える