Validation yii2验证不起作用
我需要验证另一个表中的值,这两个表都是字段类型decimal 如果选择了数量模型1和可用模型2数据 模式1 统治 自定义验证函数Validation yii2验证不起作用,validation,model,yii2,rule,yii2-validation,Validation,Model,Yii2,Rule,Yii2 Validation,我需要验证另一个表中的值,这两个表都是字段类型decimal 如果选择了数量模型1和可用模型2数据 模式1 统治 自定义验证函数 public function checkAvailable($attribute, $params) { $caid = $this->capex_budget_id; $available = Capexbudget::find() ->select(['available']) -&
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的可用数据
以下是查询日志
但验证不起作用它不会比较$this->amount和$available之间的值
请看我遗漏的内容。首先,您在此处选择的所有记录都与您的where条件相匹配:
$available = Capexbudget::find()
->select(['available'])
->where('id = :caid', [':caid' => $caid])
->all(); // HERE
您应该将函数all更改为一,以获得一条记录。
第二件事是,如果使用all或one,则该方法返回的是object,而不是value
要使其工作,您应该将if语句更改为:
if ($this->amount > $available->available){ //here, compare to attribute `available`
哦,你的回答对我有用。非常感谢你。先生
if ($this->amount > $available->available){ //here, compare to attribute `available`