1

我有一个非常基本的表,只有几列。它15 records在里面。

现在,如果我使用这个query

SELECT * FROM excursions WHERE lang_id = 1

它按我的预期返回5记录。

但是,当我使用教义2时,它会创建一个这样的查询:

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返回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. 不会减慢进程吗?

4

1 回答 1

2

不需要线。正确的代码是:

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

您在代码中所做的是将“ from”部分添加两次。一旦你执行“ createQueryBuilder”方法时由 Doctrine 完成(它添加“ select”和“ from”本身)。Excursions您传递了从未使用过的别名“ ”。然后添加第二个“ from”,别名为“ e”。

于 2012-10-22T07:45:16.577 回答