显示首先出现最高点的列表

时间:2018-03-12 21:52:06

标签: php symfony doctrine

我正在显示一个项目列表,我希望最高点首先出现,而不管数据的排序方式如何。首先,执行逻辑的片段正在工作,但是如表结构中所示,当使用不同的变量进行输入时,预期的逻辑输出将失败。这是实体结构

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。

请问我的算法可能有什么问题

1 个答案:

答案 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();