我需要验证另一个表中的值,它们都是字段类型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
这是查询日志
但验证不起作用,它不会比较$ this-> amount和$ available之间的值 我想念的是什么。
答案 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`