【问题标题】:Yii2: How to put null values to the end of an object list when sorting is ascending?Yii2:当排序是升序时,如何将空值放在对象列表的末尾?
【发布时间】:2015-03-16 07:28:56
【问题描述】:

这是我的数据提供者:

$dataProvider = new ActiveDataProvider([
    'query'      => $query,
    'pagination' => ['pageSize' => 50],
    'sort'       => [
        'defaultOrder' => [
            'priority'      => SORT_DESC,
            'date_targeted' => SORT_ASC
        ]
     ]
]);

我想要的是移动(“未设置”)到结果的末尾。

我该怎么做?

【问题讨论】:

  • 请指定您使用的 DBMS。

标签: php activerecord yii2


【解决方案1】:

您可以在select 中添加新字段。并设置在IF 这样的情况下:

$query->select([
    '*', 
    new \yii\db\Expression('IF(date_targeted IS NULL, 1, 0) AS date_targeted_flag')
]);

sort 中添加date_targeted_flag

'sort' => [
    'defaultOrder' => [
        'date_targeted_flag' => SORT_ASC,
        'priority'           => SORT_DESC,
        'date_targeted'      => SORT_ASC
    ],
    'attributes' => [
        'date_targeted_flag',
        'priority',
        'date_targeted'
    ]
]

这很好用 - herehere

【讨论】:

  • @ChhornSoro 我不知道。 vitalik_74 提供了这个答案。
  • @vitalik_74 错误消失了,但“未设置”仍在结果的顶部。
  • 我将IF 更改为date_targeted IS NULL。并更新我的答案和截图。我忘了你在DATE 字段中使用NULL 值。使用运算符IS 进行值检查。
猜你喜欢
  • 2014-08-09
  • 2020-07-29
  • 2011-11-29
  • 2018-07-29
  • 2011-08-15
  • 2021-07-18
  • 2017-09-01
  • 2016-07-03
  • 2019-12-17
相关资源
最近更新 更多