我怎样才能把一行排到第一位?
How can I order a row into first position?
我有这个表格:
$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)
;
},
])
这是一个显示城市列表的 select。
一位客户告诉我他需要一个字段 "Around me" 来显示 20 公里周围的所有城市。
为此,我在数据库中用这个名称创建了一个新城市,但现在我需要将它放在 select.
的第一个位置
在 sql 中,我会使用类似 ORDER BY (
insee_code= '[specific_code_of_the_city]')
的东西,但我不知道如何使用查询构建器。
您知道我如何使用 symfony 查询生成器来做到这一点吗?
编辑:这正是 How do I return rows with a specific value first?
的确切问题
您可以创建一个隐藏字段并以此排序。
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)
;
我有这个表格:
$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)
;
},
])
这是一个显示城市列表的 select。
一位客户告诉我他需要一个字段 "Around me" 来显示 20 公里周围的所有城市。
为此,我在数据库中用这个名称创建了一个新城市,但现在我需要将它放在 select.
的第一个位置在 sql 中,我会使用类似 ORDER BY (
insee_code= '[specific_code_of_the_city]')
的东西,但我不知道如何使用查询构建器。
您知道我如何使用 symfony 查询生成器来做到这一点吗?
编辑:这正是 How do I return rows with a specific value first?
的确切问题您可以创建一个隐藏字段并以此排序。
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)
;