2

Doctrine 2 の DQL に問題があります。

サブクエリは DQL では使用できないように見えるため、変換方法がわかりません:

SELECT DISTINCT a.ID_DOMAINE, L_DOMAINE, b.ID_SS_DOMAINE, L_SS_DOMAINE, c.ID_COMPETENCE,     L_COMPETENCE
    FROM ((qfq_prod.REF_DOMAINE a inner join qfq_prod.REF_SS_DOMAINE b on a.id_domaine = b.id_domaine)
inner join qfq_prod.REF_COMPETENCE c on b.id_ss_domaine = c.id_ss_domaine)
inner join qfq_prod.REF_PERS_COMP d on c.id_competence = d.id_competence

DQL 式に変換します。

私はそれを試してみました

「エラー: クラス '(' が定義されていません。」

Query Builder を使用してこれを行うこともできることがわかりました。

Doctrine 2 を初めて使用するので、どうすればこれを行うことができるか説明してもらえますか?

私のDQLは現在:

$query = $this->getEntityManager()->createQuery ( "SELECT DISTINCT a.ID_DOMAINE, L_DOMAINE, b.ID_SS_DOMAINE, L_SS_DOMAINE, c.ID_COMPETENCE, L_COMPETENCE
FROM ((BdDoctrine\Entity\Domaine a inner join BdDoctrine\Entity\SsDomaine b on a.id_domaine = b.id_domaine)
inner join BdDoctrine\Entity\Competence c on b.id_ss_domaine = c.id_ss_domaine)
inner join BdDoctrine\Entity\LienPersComp d on c.id_competence = d.id_competence" );

$res = $query->getResult ();
4

2 に答える 2

1

サブクエリは DQL では使用できないように見えるため、変換方法がわかりません:

実際、そうです。あなたのコードは(違反ではありません)ほとんど読めないので、例を挙げます:

//controller
$repo = $this->getDoctrine()->getRepository("Your:Bundle:Category") ;
$results = $repo->findAllForSomePage() ;

// CategoryRepository.php
public function findAllForSomePage()
{
    return $this->createQueryBuilder("o")
        ->innerJoin("o.products", "p", "WITH", "p.price>:price")->addSelect("p")
            ->setParameter("price", 50)
        ->where("o.id IN (SELECT s1.id FROM Your:Bundle:Something s1 WHERE s1.col1=5)")
        ->getQuery()->getResult() ;
}

ここでは、Category hasMany Products リレーションがあり、CategoryRepository ファイルを定義したと仮定します。コントローラーでクエリを作成しないでください。

この例では、価格が 50 を超える製品があり、カテゴリの ID が架空のサブクエリによって取得されたものである場合にのみ、カテゴリを取得します。これは 100% 機能します。

要件に同じロジックを適用する必要があります。

また、doctrine によって処理される結合を使用する場合は、ステートメントを使用しないでください。ON

于 2013-07-04T17:22:08.300 に答える