我正在显示一个项目列表,我希望最高点首先出现,而不管数据的排序方式如何。首先,执行逻辑的片段正在工作,但是如表结构中所示,当使用不同的变量进行输入时,预期的逻辑输出将失败。这是实体结构
books.php
id | name | points | active
1 | huk | 5 | true
2 | foo | 2 | true
3 | doo | 2 | true
4 | jack | 12 | true
这是我的控制器片段
$restresults = $this->getDoctrine()
->getRepository('xxxBundle:Books')
->findBy(
['active' => true],
['points' => 'DESC']
);
上面的代码片段结果与我的编码意图无法预测,因为它会将此结果返回到与第5,2,2,12号书点相关的排序,而不是12,5,2,2。
请问我的算法可能有什么问题
答案 0 :(得分:0)
查看排序结果,看起来字符串类型是排序而不是int。
要修复该更改,列的类型在doctrine和db中都指向int,例如@Column(type="integer") */
,具体取决于您的映射样式。
另一种方法是制作DQL。如果你不能这样做,那么你需要制作自己的DQL
并在那里写命令。
实施例
$books = $em->getRepository('xxxBundle:Books')
->createQueryBuilder('q')
->addSelect('ABS(q.points) AS HIDDEN pointsOrder') // other way CAST(q.points AS UNSIGNED)
->orderBy('pointsOrder', 'DESC)
->getQuery()
->getResult();