yii2 验证不工作

yii2 Validation not working

我需要验证另一个 table 的值,它们都是字段类型 decimal

如果数量(模型 1)而且可用(模型 2 数据 selected)

模型 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 select

这里是查询日志

但验证不起作用,它无法比较 $this->amount 和 $available 之间的值 请问我遗漏了什么。

首先,您要在此处选择 所有 条符合您 where 条件的记录:

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

您应该将函数 all() 更改为 one(),以获取 一条 条记录。 第二件事是,如果你使用 all()one(),那么方法 returns object,而不是 value.

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

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