Model 在一个功能中删除带有外键的两个型号
我想在一个函数中删除两个模型。但是这个模型有关系,我试着这样做:Model 在一个功能中删除带有外键的两个型号,model,foreign-keys,yii2,relationship,Model,Foreign Keys,Yii2,Relationship,我想在一个函数中删除两个模型。但是这个模型有关系,我试着这样做: public function actionDelete($id) { $this->findModel($id); return $this->redirect(['index']); } protected function findModel($id) { if (($model = UrUser::findOne($id)) !== nul
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时,我遇到了foreing键错误。要同时删除此模型,我应该做些什么?交换删除顺序。首先删除子模型,然后删除父模型:
$data = UserData::find()->where(['Id' => $RoyalUserData])->one();
if ($data->delete() && $model->delete()) {
return $this->redirect(['index']);
}
完整性约束冲突–yii\db\IntegrityException SQLSTATE[23000]:完整性约束冲突:1451无法删除或更新父行:外键约束失败
则您有另一条具有相同外键的记录。您需要先删除所有子记录,然后才能删除父记录。您能解释一下这种关系吗?我在这里看到三个表,您只想删除其中的两个,对吗?UrUser
,RoyalUserData
,UserData
之间的关系是什么?