0

Symfony 2.3 の Doctrine Query で奇妙な問題が発生しました

(前もって、私のクエリの英語/フランス語の用語については申し訳ありません.. :s )

コントローラーで、リポジトリの 1 つで findAll() クエリを起動すると、次のクエリが生成されます。

SELECT t0.id AS id1, t0.date AS date2, t0.projet_id AS projet_id3, t0.societe_id AS societe_id4, t0.user_id AS user_id5 FROM Estimate t0

したがって、関係に関係するものを含むすべての列を取得します。しかし、クエリに leftJoin を追加する必要があります。カスタム クエリを作成しました。

$qb = $this->createQueryBuilder('e')
    ->addSelect('e')
    ->leftJoin('e.works', 'w')
    ->addSelect('w')
    ->leftJoin('w.tache', 't')
    ->addSelect('t')
    ->leftJoin('t.groupetache', 'g')
    ->addSelect('g')
    ;

そして今、結合されたすべての列を取得しましたが、メインテーブル「Estimate」の場合、クエリは ID と日付のみを返します (次のクエリが生成されます:)

SELECT e0_.id AS id0, e0_.date AS date1, w1_.id AS id4, w1_.description AS description5, w1_.prix_ha AS prix_ha6, w1_.prix_vente AS prix_vente7, t2_.id AS id8, t2_.nom AS nom9, t2_.prix_achat AS prix_achat10, g3_.id AS id11, g3_.nom AS nom12 FROM Estimate e0_ LEFT JOIN Work w1_ ON e0_.id = w1_.estimate_id LEFT JOIN Tache t2_ ON w1_.tache_id = t2_.id LEFT JOIN GroupeTaches g3_ ON t2_.groupetache_id = g3_.id

ポイントがありませんか?

すべてのメイン テーブル フィールドと結合フィールドを取得する方法はありますか?

Sequel Pro の「手動」クエリは、私が望むものを返します。次のように、DQL クエリでクエリを変更しようとしました。

$query = $this->getEntitymanager()
    ->createQuery('
        SELECT e0_.id AS id0, e0_.date AS date1, e0_.id AS id2, e0_.date AS date3,
        e0_.projet_id AS projet_id3, e0_.societe_id AS societe_id4, e0_.user_id AS user_id5,
        w1_.id AS id4, w1_.description AS description5, w1_.prix_ha AS prix_ha6, w1_.prix_vente AS prix_vente7,
        t2_.id AS id8, t2_.nom AS nom9, t2_.prix_achat AS prix_achat10, g3_.id AS id11, g3_.nom AS nom12
        FROM EcomCrmBundle:Estimate e0_
        LEFT JOIN EcomCrmBundle:Work w1_ WITH e0_.id = w1_.estimate_id
        LEFT JOIN EcomCrmBundle:Tache t2_ WITH w1_.tache_id = t2_.id
        LEFT JOIN EcomCrmBundle:GroupeTaches g3_ WITH t2_.groupetache_id = g3_.id');

しかし、Estimate には projet_id フィールドがないというエラーが表示されました :(

よろしくお願いします。

4

1 に答える 1

1

推測ですが、結果を取得するためにどのような方法を使用していますか? getArrayResult() ? getResult() を試してください。「見積もり」のすべての行を選択する必要があります。

于 2013-08-16T12:45:46.237 に答える