在 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]);
}
->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]);
}