1

列が少ない非常に基本的なテーブルがあります。中にあり15 recordsます。

今、私がこれを使用する場合query

SELECT * FROM excursions WHERE lang_id = 1

期待どおり5にレコードを返します。

しかし、doctrine2を使用すると、次のようなクエリが作成されます。

SELECT
e0_.idx AS idx0,
e0_.place_id AS place_id1,
e0_.lang_id AS lang_id2,
e0_.excursion_name AS excursion_name3,
e0_.excursion_type AS excursion_type4,
e0_.excursion_text_short AS excursion_text_short5,
e0_.start_date AS start_date6,
e0_.end_date AS end_date7,
e0_.override_place AS override_place8,
e0_.languages AS languages9,
e0_.meeting_place AS meeting_place10,
e0_.excursion_text AS excursion_text11,
e0_.starts_at AS starts_at12,
e0_.category_id AS category_id13,
e0_.map_link AS map_link14,
e0_.capacity AS capacity15,
e0_.pick_up_time AS pick_up_time16,
e0_.is_activity AS is_activity17
FROM excursions e1_, excursions e0_
WHERE e0_.lang_id = 1

さて、これを実行すると25 records5 copy for each record。それらはまったく同じですが、代わりにレコードを5返します。255x5

はい、削除するexcursions e1_と合計5レコードが返されます。しかし、なぜ?

誰かがそのクエリを見ることができますか、私はここで何かを逃しましたか?

使用しQueryBuilder()ました。

$qb = $this->getRepository()->createQueryBuilder('Excursions');
$qb->select('e')->from('Web\Bundle\ExcursionBundle\Entity\Excursions', 'e');
$qb->andWhere("e.langId = 1");

:私は他のスタイルを。の有無にかかわらず行いQueryBuilder()ました。結果は常に同じです。PHPは1それぞれのコピーを取得しました。サーバー側で実行するクエリは5、各レコードのコピーを取得します。

500教義が複数回取得された場合、レコードのようにテーブル全体をフェッチするとどうなるので、私はこれを求めています。それはおそらくつかむでしょう500x5プロセスを遅くしませんか?

4

1 に答える 1

2

必要な行はありません。正しいコードは次のとおりです。

$qb = $this->getRepository()->createQueryBuilder('e');
$qb->andWhere("e.langId = 1");

コードで行うことは、「from」の部分を2回追加することです。「」メソッドを実行するときにDoctrineによって実行されると(「 」と「」自体createQueryBuilderが追加されます)。使用されないエイリアス" "を渡します。次に、エイリアス「」で2番目の「」を追加します。selectfromExcursionsfrome

于 2012-10-22T07:45:16.577 に答える