我有一個非常基本的表,只有幾列。它有15 records
在裏面。Doctrine2獲取每個記錄的5個副本
現在,如果我用這個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 records
! 5 copy for each record
。它們完全相同,但不是5
它返回25
記錄。 (5x5)
哦是的,如果我刪除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
。 不會放慢這個過程嗎?
每一層間接都帶有價格。與僅僅專門查詢數據庫相比,ORM確實會減慢速度。所以我想你不要在這裏特別要求速度(因爲*結果很明顯*我會說),但可能如何做一個不同的查詢策略? – hakre