我有一个包含两个字段的表格。第一个字段是相关模型的下拉列表:伙伴。在验证中,我想根据此相关模型检查其他输入。
示例:
因此,第1步:我必须选择合作伙伴。在模型合作伙伴中,有一个属性和一个值,分别是amount_min(例如10)和amount_max(例如20)。
第2步:我必须输入金额。 (例如21)
在验证中,我想检查用户在字段2中键入的金额是否在所选伙伴的amount_min和amount_max之间。
public function rules() {
return [
['amount', 'compare', 'compareValue' => function($model) {return $model->partner->amount_min;}, 'operator' => '>=', 'type' => 'number'],
但是我得到了:
试图获取非对象的属性
如何以及在哪里可以做到最好呢?
为什么另一个问题不同:在进行验证时,还没有保存related_id,因此还没有关系。
答案 0 :(得分:0)
比较并验证“金额”字段。例如:
protected $_partner;
//...
public function rules()
{
return [
['amount', 'required'],
['amount',
function ($attribute) {
if ($this->_partner === null || $this->partner_id < $this->_partner->amount_min) {
$this->addError($attribute, Yii::t('user', 'The amount is less...'));
}
}
]
}
#code ...
public function beforeValidate()
{
if (parent::beforeValidate()) {
$this->_partner = partner::findOne($this->partner_id);
return true;
} else {
return false;
}
}
您也可以使用模型:
public function verify ()
{
if ($ this->validate() && $this->_partner) {
#code ....
}
return false;
}
然后在控制器中,调用verify方法