【问题标题】:Doctrine QueryBuilder order by the amount of 2 fieldsDoctrine QueryBuilder 按 2 个字段的数量排序
【发布时间】:2017-06-11 13:28:19
【问题描述】:

我想计算 2 个字段的数量,并对结果进行排序。 查询构建器结束如下:

$qb->orderBy('(e.likesCnt + e.additionalLikes)', 'DESC')

我得到了这个错误:

在渲染模板期间引发了异常 ("[Syntax Error] line 0, col 264: Error: Expected end of string, got 'e'")

最后一次尝试是什么时候:

$qb->select('e, (e.likesCnt + e.additionalLikes) AS totalLikes')
$qb->orderBy('totalLikes', 'DESC')

但它也会带来错误

在渲染模板期间引发了异常 ("[Semantical Error] line 0, col 290 near 'totalLikes DESC,': 错误: 'totalLikes' 未定义。")

感激地接受任何解决方案:-)

更新: 好吧,“orderby”语句中不允许使用别名。此外,如果您的字段之一为空,那么金额也将为空,这会导致语义错误。我的解决方案是:

$qb->orderBy('((e.likesCnt + e.additionalLikes)+0)', 'DESC')

在这种情况下,将应用排序而不会出现语义错误并获得正确的结果。

【问题讨论】:

  • 将您的交流结果添加到您的选择中(例如->select('e.likesCnt + e.additionalLikes', 'totalLikes') 并按此排序 (->orderBy('totalLikes', 'DESC');)
  • 你能显示所有查询吗?
  • @ImanaliMamadievthanx 的帮助,但问题已用我的解决方案更新
  • @Roland,你为什么不使用我的答案?还是我的答案无效?
  • @ImanaliMamadiev 你的答案是错误的。第一条评论有原因。请自行检查

标签: doctrine-orm


【解决方案1】:

select方法是以数组的形式获取参数,例如:

$qb->select('e', '(e.likesCnt + e.additionalLikes) AS totalLikes')
$qb->orderBy('totalLikes', 'DESC')

【讨论】:

  • 您已创建别名“totalLikes”,但不能在“orderby”中使用别名
  • @Roland 试试AS HIDDEN totalLikes
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2012-11-18
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多