我有一个包含2个ID(Znw
& a_id
)的联结表wz_id
,以及一个包含2个选择框的表单。如果相应型号fieldn
的{{1}}与相应型号a
的{{1}}具有相同的价值,我想查看规则。
规则:
field
自定义验证功能(现在只检查是否找到了正确的值):
wz
relation [['a_id', 'wz_id'], 'compareFields', 'on' => 'createwz', 'params' => []],
:
public function compareFields($attribute, $params) {
$this->addError($attribute, $this->a->fieldn);
return false;
}
这种关系在视图等方面运作良好。
relation a
:
public function getA() {
return $this->hasOne(\app\models\A::className(), ['id' => 'a_id']);
}
控制器:
wz
如果我将public function getWz() {
return $this->hasOne(\app\models\Wz::className(), ['id' => 'wz_id']);
;}
添加到自定义验证功能,它会显示正确的值。如果我正在添加public function actionCreatewz() {
$model = new Znw;
$a = A::find()->where(['id' => $_GET['Znw']['a_id']])->one();
$model->scenario = 'createwz';
try {
if ($model->load($_POST) && $model->save()) {
return $this->redirect(Url::previous());
} elseif (!\Yii::$app->request->isPost) {
$model->load($_GET);
}
} catch (\Exception $e) {
$msg = (isset($e->errorInfo[2])) ? $e->errorInfo[2] : $e->getMessage();
$model->addError('_exception', $msg);
}
return $this->render('createwz', [
'model' => $model,
'a' => $a,
]);
}
,那么我收到以下错误:
尝试获取非对象的属性
但是,在$ _POST请求中,两个ID($this->wz->field
& $this->a->fieldn
)都有正确的值,因此我应该能够看到相应的a_id
模型属性。为什么我会收到此错误?你能指点我正确的方向吗?提前谢谢!