在 Yii2 中如何在 andFilterWhere() 方法中执行 sql 函数?或替代方法是什么?

In Yii2 how to perform a sql function inside andFilterWhere() method? or What is the alternative method?

 ->andFilterWhere(['=>',"invoiceDate - dueDate",$this->overDueLimit])

我需要这个过滤器来提取 gridview 中的逾期发票。 "invoiceDate - dueDate" 应该是一个 sql 函数,其中 returns 一个数字。但是 Yii2 将其作为字符串(作为字段名称)。 如何以正确的方式执行相同的任务?谢谢

似乎 filterWhere 不允许计算值,因此您可以改用允许文字 where 条件的 andWhere()。所以你可以为你需要的查询创建你的where条件..在这种情况下你必须检查是否设置了$this->overDueLimit的值..

 if ( isset($this->overDueLimit ) ) {

 $query->andWhere("invoiceDate - dueDate  => " . $this->overDueLimit);
 }

明显检查 var $this->overDueLimit 的正确清理

感谢 Scais Edge.I 根据您的建议找到了解决方案。我在搜索方法中添加了以下几行,它解决了我的问题。

if(!empty($this->overDue))
{
$terms=MyFunc::validate($this->overDue);// sanitize and get number
$query->andFilterWhere(['>=',"DATEDIFF(CURDATE(),`dueDate`)",$terms])
      ->andFilterWhere(['=', 'status', self::$pending]);
}