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 フィールドがないというエラーが表示されました :(
よろしくお願いします。