Yii2 基于日期的复杂排序

Complicated sorting based on date Yii2

我正在 yii2 中创建搜索。

$q = $_GET['q'];

$dataProvider = new ActiveDataProvider([
    'query' => company::find()
        ->where('name like :name', [':name' => "$q%"])
]);
return $this->render('index', ['dataProvider' => $dataProvider,]);

我还有两个日期属性(有效付款从和到):

from_date and to_date

我需要显示结果,从有效付款的人开始。

如果我想先显示有效支付的公司,qyery应该怎么看?他们都应该按名称 ASC..

排序

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

public function getValidPayment()
{
    $today = date("Y-m-d");
    return (($this->from_date <= $today) && ($today <= $this->to_date));
}

这是yii2

谢谢!

编辑:只是为了说明我需要什么:

  1. 根据名称查询公司(名称如:name')
  2. 优先考虑有效日期(from_date 和 to_date)
  3. 显示没有有效起止日期的其余部分(查询中的两个组都应按名称 ASC 排序)。

也许我应该在 2 个查询中执行此操作,然后以某种方式将它们组合起来?

'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')

不要忘记初始化 $today