我有一个表格,第一步是选择城市(城市是一个相关模型,具有人口的最小值和最大值的属性,例如10.000-12.000)。在第二步中,用户必须填写人口(例如11.000)。现在,在规则中,我正在检查用户是否填写了正确的人口数量(如果介于城市的最小人口和最大人口之间)。
正在创建新记录。但是我有更新操作的问题。因为如果我已经有一定数量的人口(11.000),并且我附加了City
,并且我想将城市更改为其他人口应为例如在5.000到7.000之间,我的模型中的总体验证失败,因为它是基于 old 城市进行验证的(当然,直到所有值通过验证city_id
都不会更新)。您能指出我正确的方向吗?验证之前是否应该在模型中更新city_id
(可能)?谢谢!
表格:
<?= $form->field($model, 'city_id')->dropDownList(
\yii\helpers\ArrayHelper::map(app\models\City::find()->all(), 'id', 'name')); ?>
<?= $form->field($model, 'population')->textInput(['maxlength' => true]) ?>
模型规则:
...
['population', 'validatePopulation'],
...
public function getCity() {
return $this->hasOne(\app\models\City::className(), ['id' => 'city_id']);
}
public function validatePopulation($attribute, $params, $validator) {
if ($this->population < $this->city->population_min) {
$this->addError($attribute, 'Population has to be larger than ' . $this->city->population_min);
} elseif ($this->population > $this->city->population_max) {
$this->addError($attribute, 'Population has to be smaller than ' . $this->city->population_max);
}
}