Yii2表单更新-基于相关模型属性的验证

时间:2018-07-13 06:20:57

标签: php validation yii2 sql-update foreign-keys

我有一个表格,第一步是选择城市(城市是一个相关模型,具有人口的最小值和最大值的属性,例如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);
    }
}

0 个答案:

没有答案