基于日期Yii2的复杂排序

基于日期Yii2的复杂排序,yii2,Yii2,我正在yii2中创建搜索 $q = $_GET['q']; $dataProvider = new ActiveDataProvider([ 'query' => company::find() ->where('name like :name', [':name' => "$q%"]) ]); return $this->render('index', ['dataProvider' => $dataProvider,]); 我还有两个

我正在yii2中创建搜索

$q = $_GET['q'];

$dataProvider = new ActiveDataProvider([
    'query' => company::find()
        ->where('name like :name', [':name' => "$q%"])
]);
return $this->render('index', ['dataProvider' => $dataProvider,]);
我还有两个日期属性(有效付款日期和日期):

我需要显示的结果开始与谁有一个有效的付款第一

如果我想先显示有效付款的公司,qyery应该是什么样子?它们都应该按名称ASC排序

我有一个函数可以在模型中获取此值,但在查询中没有:

public function getValidPayment()
{
    $today = date("Y-m-d");
    return (($this->from_date <= $today) && ($today <= $this->to_date));
}
公共函数getValidPayment()
{
$today=日期(“Y-m-d”);
返回(($this->from_date
'query'=>company::find()
->挑选([

‘有效付款’=>“(“”)$today。"'您在哪里实现此功能?在
GridView
中?我使用的是数据提供程序,但在索引视图中使用for循环。问题是在查询中获得正确的顺序。这是一个包含一百万个公司ListedHanks的大型数据库。但查询是否也会包括所有没有有效from和t的元素o日期?因为大多数公司都没有,但我需要优先选择具有有效起始日期和截止日期的日期。更新后的答案,请选中此方式-使用别名在“选择”中添加逻辑字段,然后首先按此字段排序
public function getValidPayment()
{
    $today = date("Y-m-d");
    return (($this->from_date <= $today) && ($today <= $this->to_date));
}
'query' => company::find()
  ->select([
    'valid_payment'=>"(('".$today."'<=to_date) AND (from_date<='".$today."'))",
    name,
    //...some fields you required in your grid
  ])
  ->where('name like :name', [':name' => "$q%"])
  ->orderBy('valid_payment DESC, name ASC')