Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Yii2 GridView默认顺序(按情况)_Sorting_Gridview_Yii2_Sql Order By_Case - Fatal编程技术网

Sorting Yii2 GridView默认顺序(按情况)

Sorting Yii2 GridView默认顺序(按情况),sorting,gridview,yii2,sql-order-by,case,Sorting,Gridview,Yii2,Sql Order By,Case,我正在使用GridView显示一些数据。我需要按2列添加默认排序,如下所示: (CASE WHEN (inbound_datetime IS NULL AND outbound_datetime < NOW()) OR (inbound_datetime IS NOT NULL AND inbound_datetime < NOW()) THEN 9999 WHEN (inbound_datetime IS NOT NULL AND outbound_

我正在使用GridView显示一些数据。我需要按2列添加默认排序,如下所示:

(CASE
    WHEN (inbound_datetime IS NULL AND outbound_datetime < NOW()) OR (inbound_datetime IS NOT NULL AND inbound_datetime < NOW())
        THEN 9999
    WHEN (inbound_datetime IS NOT NULL AND outbound_datetime < NOW())
        THEN inbound_datetime
        ELSE outbound_datetime
END) ASC

有什么方法可以使这个默认排序工作并且仍然保持按列名正确使用网格排序的能力吗?

我做了更多的思考,并想出了解决这个问题的方法

我在打开视图的控制器方法中定义查询。因此,我添加了一个条件来检查sort参数是否传递给get请求。如果它被传递,我将在不使用
orderby
子句的情况下创建查询。如果未传递sort参数(未进行列排序),我将使用
orderby
子句创建一个查询。 在我的控制器方法中:

if (Yii::$app->request->get('sort')) {
    $query = Travel::find();
} else {
    $query = Travel::find()
        ->orderBy('(CASE
            WHEN (inbound_datetime IS NULL AND outbound_datetime < NOW()) OR (inbound_datetime IS NOT NULL AND inbound_datetime < NOW())
                THEN 9999
            WHEN (inbound_datetime IS NOT NULL AND outbound_datetime < NOW())
                THEN inbound_datetime
                ELSE outbound_datetime
        END) ASC');     
}   
if(Yii::$app->request->get('sort')){
$query=Travel::find();
}否则{
$query=Travel::find()
->orderBy(')(大小写)
当(inbound_datetime为NULL且outbound_datetime
if (Yii::$app->request->get('sort')) {
    $query = Travel::find();
} else {
    $query = Travel::find()
        ->orderBy('(CASE
            WHEN (inbound_datetime IS NULL AND outbound_datetime < NOW()) OR (inbound_datetime IS NOT NULL AND inbound_datetime < NOW())
                THEN 9999
            WHEN (inbound_datetime IS NOT NULL AND outbound_datetime < NOW())
                THEN inbound_datetime
                ELSE outbound_datetime
        END) ASC');     
}