Symfony的转换本地SQL查询建设者

问题描述:

我有一个SQL查询:Symfony的转换本地SQL查询建设者

SELECT users.username, count(follows.user_id) 
FROM follows 
INNER JOIN users ON follows.follow_user_id=users.id 
GROUP BY follow_user_id; 

奏鸣曲联系,我想与追随者的数量来筛选我的数据。 该请求有效,但我无法在Sonata Admin中使用它。

我具备的功能:

public function callbackFilterFollow($queryBuilder, $alias, $field, $value) 
{ 
    if (!$value) { 
     return; 
    } 
    //$queryBuilder->select('username')->addGroupBy('o.id'); 
    return true; 
} 

我无法弄清楚如何使用查询生成器来我的SQL查询转换。

+0

到目前为止您尝试了什么?你目前的查询生成器是怎样的? – nifr

+0

我尝试逐步构建我的查询。目前我有$ queryBuilder-> from('follow','f') - > select('COUNT(f.user_id)'); 但Symfony说下面的类没有定义。遵循不是一个实体。 – Sancho

+0

我尝试:$ queryBuilder-> innerJoin('o.followings','f') - > andWhere('user_id =:id') - > setParameter('id',1); 但无效> Sancho

您是否将查询表映射到实体? 如果不看看学说documentation for oneToMany relationships

一旦你完成了,你可以做这样的事情,请记住使用你的对象字段,而不是像表字段名称下面!

$qb->select('u.username, COUNT(f.user_id) as cnt') 
     ->from('UserBundle:Follows' , 'f') //this is your entity 
     ->leftJoin('UserBundle:Users','u') //your users entity 
     ->groupBy('f.follow_user_id') 
     ->getQuery() 
     ->getOneOrNullResult(); 

您的实体可能需要具有完整路径。然而,有两件事我不知道你在做什么。

  1. 如果你只是选择COUNT(*)与你不需要组合的内部连接,你正在计算内部连接。
  2. 您正在创建一个奏鸣曲过滤器,但我没有看到您使用参数的位置,我假设您的真实查询看起来不同并且具有作为参数某处的值。 所以你可能需要一些改变,你可以找到更多的信息on this other post