我想在一个功能中删除两个模型。但是这个模型有我试图这样做的关系:
public function actionDelete($id) {
$this->findModel($id);
return $this->redirect(['index']);
}
protected function findModel($id) {
if (($model = UrUser::findOne($id)) !== null) {
$RoyalUserData=$model->Rel_RoyalUserData;
$data= UserData::find()->where(['Id' => $RoyalUserData])->one();
if($model->delete() && $data->delete()){
return $this->redirect(['index']);}
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
或者这样:
public function actionDelete($id) {
$this->findModel($id)->delete();
$this->findRoyalUserData($id)->delete();
return $this->redirect(['index']);
}
protected function findModel($id) {
if (($model = UrUser::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
protected function findRoyalUserData($id) {
if (($model = UrUser::findOne($id)) !== null) {
$RoyalUserData=$model->Rel_RoyalUserData;
$data= UserData::find()->where(['Id' => $RoyalUserData])->one();
return $data;
} else {
throw new NotFoundHttpException('data not exist.');
}
}
但是当我删除第一个模型时我有
抛出新的NotFoundHttpException('数据不存在。');
因为我试图引用一个不再存在的对象,因为它刚被删除。另一方面,当我第一次尝试删除RoyalUserData时,我遇到了关键错误。我该怎么做才能同时删除这个模型?
答案 0 :(得分:0)
交换删除顺序。首先删除子模型,然后删除父模型:
$data = UserData::find()->where(['Id' => $RoyalUserData])->one();
if ($data->delete() && $model->delete()) {
return $this->redirect(['index']);
}