Sorting Yii2 GridView默认顺序(按情况)
我正在使用GridView显示一些数据。我需要按2列添加默认排序,如下所示: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_
(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');
}