删除DB yii2中的行

时间:2016-08-14 17:30:12

标签: yii2 relational-database sql-delete

我有"组件"我在他们之间建立关系,如果我想"更新"关于某些与其他组件相关的组件的信息,我必须删除相关的"组件"和关系 enter image description here

。在actionUpdate中我有:

 public function actionUpdate($id) {
    $model = Component::find()->where(['id' => $id])->one();
    $tractorModels = ArrayHelper::map(Tractormodel::find()->all(), 'id', 'model');
    $components = Component::find()->all();
    $depModels = Dependency::find()->where(['component_id' => $id])->all();
    $deletedIDs = Yii::$app->request->post("deletedIds");

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        $dependendComponents = Yii::$app->request->bodyParams['ids'];
        foreach ($dependendComponents as $dComp) {
            $dependencyModel = new Dependency();
            $dependencyModel->setAttributes([
                'count' => $dComp['quantity'],
                'component_id' => $model->id,
                'dependent_id' => $dComp['id']
            ]);
            $dependencyModel->save();
        }
        if ($deletedIDs && is_array($deletedIDs)) {
            Dependency::deleteAll(['id' => Yii::$app->request->post()["deletedIds"]]);
       }
        return $this->redirect(['index', 'id' => $model->id]);
    } else {
        return $this->render('update', [
                    'model' => $model, 'tractorModels' => $tractorModels,
                    'components' => $components, 'depModels' => $depModels,
        ]);
    }
}

在视图中我使用jQuery来获取带有id(deletedIDs)的数组中已删除的项目,并删除关系和相关的"项目"到组件

 wrapper.on("click", ".remove_field", function (e) {

        var wantedDiv = $(this).parent('div').children().first();
        var selectTag = $(wantedDiv).find('select');
        var clickedId = $(selectTag).find('[selected=""]').attr('value');
        var deletedIdsArray = $('#deletedIDs');
        console.log($('#deletedIDs'));
        if (clickedId) {
            $('#deletedIds').append('<input type="hidden" name="deletedIds[]" value="' + clickedId + '">');
        }
        e.preventDefault();
        $(this).parent('div').remove();
        x--;
    });

一切都很好&#34;理论&#34;但是组件不会在DB中删除,我看是否

 if ($deletedIDs && is_array($deletedIDs)) {
        Dependency::deleteAll(['IN', 'id', $deletedIDs]);
   }

工作,我的var_dump($ deletedIDs) 并获得包含我要删除的项目的数组,但是与&#34;项目相关的组件&#34;当我删除它们时,它们不会消失。有人能告诉我我想念的是什么吗?

1 个答案:

答案 0 :(得分:1)

解决了它:

 Yii::$app->db->creat‌​eCommand()->delete('d‌​ependency', ['dependent_id' => $deletedIDs])->execu‌​te(); 

而不是

Dependency::deleteAl‌​l(['id' => Yii::$app->request->‌​post()["deletedIds"]]‌​);