yii2验证无效

时间:2018-03-06 14:28:16

标签: validation model yii2 rule yii2-validation

我需要验证另一个表中的值,它们都是字段类型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');
    }
}

我可以从Capexbudget获得数据,其中我选择了ID

这是查询日志

enter image description here

但验证不起作用,它不会比较$ this-> amount和$ available之间的值 我想念的是什么。

1 个答案:

答案 0 :(得分:1)

首先,您在这里选择符合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`