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`
我需要验证另一个 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`