2013-03-03 99 views
0

我可以很方便地查询与内部联接symfony的ORM的学说查询

$qb = $this->createQueryBuilder('r') 
    ->innerJoin('UserBundle:User', 'u') 
    ->where('r.nick = u.id') 
    ->andWhere('r.odobera=:id') 
    ->setParameter('id', $id) 
    ->orderBy('r.time', 'DESC') 
    ->setMaxResults(50); 

return $qb->getQuery()->getResult(); 

它应该是一个查询吗?但在探查器中我有

SELECT t0.username AS [...] FROM users t0 WHERE t0.id = ? LIMIT 1 
Parameters: [1465] 
[Display runnable query] 
Time: 1.79 ms [ Explain query ] 
SELECT r0_.id AS id0, [...] FROM requests r0_ INNER [...] ORDER BY r0_.time DESC LIMIT 50 
Parameters: [1465] 
[Display runnable query] 
Time: 0.67 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2072'] 
[Display runnable query] 
Time: 0.64 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2386'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['79'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2432'] 
[Display runnable query] 
Time: 0.50 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['40'] 
[Display runnable query] 
Time: 0.52 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['2090'] 
[Display runnable query] 
Time: 0.46 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['1044'] 
[Display runnable query] 
Time: 0.51 ms [ Explain query ] 
SELECT t0.username AS username1, [...] FROM users t0 WHERE t0.id = ? 
Parameters: ['27'] 
[Display runnable query] 
Time: 0.54 ms [ Explain query ] 

每个记录的每个“连接”的一个查询......为什么?

PS:本文只是为了让这篇文章更长,因为我不能提交问题“只是”这么多细节..但我认为我的问题解释得很好。顺便说一句:我问朋友,他有similiard问题)

回答

0

你没有指定要选择什么,所以只是requests哪里水合。

您可以指定select()方法上查询生成器什么来滋润:

$qb = $this->createQueryBuilder('r') 
    ->select(array('r', 'u')) 
    ->innerJoin('UserBundle:User', 'u') 
    ->where('r.nick = u.id') 
    ->andWhere('r.odobera=:id') 
    ->setParameter('id', $id) 
    ->orderBy('r.time', 'DESC') 
    ->setMaxResults(50); 

return $qb->getQuery()->getResult(); 
+0

陛下...这引起了我的问题......没有symfony的猜测选择基础上的实体之间的关系?因为现在结果的转储看起来不错..请求对象的属性nick什么是代理用户实体...但是当我添加你的代码的一部分它看起来很奇怪,我不能然后传递结果树枝和访问他们像追随者在追随者或类似的东西了......检查屏幕:http://www.upnito.sk/0/5u5ztfusawxq5pk7uab7f3e49sr9h534.png – EnchanterIO 2013-03-03 20:03:30

+1

Symfony与它无关。这纯粹是一种学说。我更新了我的答案,因为最初我在如何指定要选择的字段时犯了一个错误。 – 2013-03-03 20:10:29

+0

结果相同 – EnchanterIO 2013-03-03 20:17:01