Doctrine2获取每条记录的5份副本

时间:2012-10-21 22:49:43

标签: php doctrine-orm

我有一个非常基本的表,列数很少。它中有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而是返回25条记录。 (的 5×5

哦,是的,如果我删除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这个过程不会放缓吗?

1 个答案:

答案 0 :(得分:2)

没有必要的线路。正确的代码是:

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

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