如何在第一个位置订购一行?

时间:2015-11-06 10:34:00

标签: sql symfony doctrine formbuilder

我有这样的表格:

$builder
    ->add('restaurantsFilter1', 'entity', [
        'label'       => 'Commune',
        'empty_value' => 'Dans toute la Narbonnaise',
        'class'       => 'AppBundle:City',
        'choice_label'    => 'name',
        'query_builder' => function (EntityRepository $er) {
            return $er
                ->createQueryBuilder('c')
                ->addSelect('d')
                ->leftJoin('c.documents', 'd')
                ->where('d.type = :type')
                ->orderBy('c.name')
                ->setParameter('type', Document::T_VILLAGE)
            ;
        },
    ])

这是一个显示城市列表的选择。

一位客户告诉我他需要一个“我周围”的字段,它将显示20公里左右的所有城市。

所以,为此,我使用此名称在我的数据库中创建了一个新城市,但现在我需要将它放在我选择的第一个位置。

在sql中我会使用像ORDER BY ( insee_code = '[specific_code_of_the_city]')这样的东西,但我不知道如何使用查询构建器。

您是否知道如何使用symfony查询构建器执行此操作?

编辑:这是How do I return rows with a specific value first?

的确切问题

1 个答案:

答案 0 :(得分:1)

你可以创建一个隐藏的字段并按顺序排序。

return $er
    ->createQueryBuilder('c')
    ->addSelect('CASE
                     WHEN c.name = "specific_code_of_city"
                     THEN 0
                     ELSE 1
                 END as HIDDEN presetOrder')
    ->addSelect('d')
    ->leftJoin('c.documents', 'd')
    ->where('d.type = :type')
    ->orderBy('presetOrder', 'ASC')
    ->addOrderBy('c.name', 'ASC')
    ->setParameter('type', Document::T_VILLAGE)
;