yii2验证无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yii2验证无效相关的知识,希望对你有一定的参考价值。

我需要从另一个表中验证一个值,它们都是字段类型decimal

如果金额(模型1)可用(模型2数据选择)

模型1规则

 public function rules()
{
    return [
           [['amount'], 'checkAvailable','skipOnEmpty' => false],
    ];
}

自定义验证功能

  public function checkAvailable($attribute, $params)
{
    $caid = $this->capex_budget_id;
    $available = Capexbudget::find()
            ->select(['available'])
            ->where('id = :caid', [':caid' => $caid])
            ->all();   // select amount from Capexbudget where id = $caid 
    if ($this->amount > $available){
     $this->addError('amount', 'not enough');
    }
}

我可以从Capex Budget获得我选择的ID的数据

这是查询日志

enter image description here

但验证不工作它不比较$ this-> amount和$ available之间的价值我想念的东西。

答案

首先,您在这里选择与where条件匹配的所有记录:

    $available = Capexbudget::find()
        ->select(['available'])
        ->where('id = :caid', [':caid' => $caid])
        ->all();  // HERE

您应该将函数all()更改为one(),以获得一条记录。第二件事是,如果你使用all()one(),那些方法会返回对象,而不是值。

要使其工作,您应该将if语句更改为:

if ($this->amount > $available->available){   //here, compare to attribute `available`

以上是关于yii2验证无效的主要内容,如果未能解决你的问题,请参考以下文章

在beforeAction里redirect无效,Yii2.0.8

Yii2片段缓存详解

Yii2密码验证正则表达式

Yii2中后台用前台的代码设置验证码显示不出来?

yii2数据验证

Yii2.0自定义验证码