Yii2:升序排序时如何将空值放在对象列表的末尾?

Yii2: How to put null values to the end of an object list when sorting is ascending?

这是我的 DataProvider:

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

我想要的是将 ("not set") 移动到结果的末尾。

我该怎么做?

您可以在 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'
    ]
]

这工作正常 - here and here