在一个函数中删除带有外键的两个模型

时间:2016-02-14 20:54:25

标签: 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)) !== 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时,我遇到了关键错误。我该怎么做才能同时删除这个模型?

1 个答案:

答案 0 :(得分:0)

交换删除顺序。首先删除子模型,然后删除父模型:

$data = UserData::find()->where(['Id' => $RoyalUserData])->one();
if ($data->delete() && $model->delete()) {
    return $this->redirect(['index']);
}