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查询转换。
答
您是否将查询表映射到实体? 如果不看看学说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();
您的实体可能需要具有完整路径。然而,有两件事我不知道你在做什么。
- 如果你只是选择COUNT(*)与你不需要组合的内部连接,你正在计算内部连接。
- 您正在创建一个奏鸣曲过滤器,但我没有看到您使用参数的位置,我假设您的真实查询看起来不同并且具有作为参数某处的值。 所以你可能需要一些改变,你可以找到更多的信息on this other post。
到目前为止您尝试了什么?你目前的查询生成器是怎样的? – nifr
我尝试逐步构建我的查询。目前我有$ queryBuilder-> from('follow','f') - > select('COUNT(f.user_id)'); 但Symfony说下面的类没有定义。遵循不是一个实体。 – Sancho
我尝试:$ queryBuilder-> innerJoin('o.followings','f') - > andWhere('user_id =:id') - > setParameter('id',1); 但无效> Sancho