2016-08-14 13 views
1

私はそれらの間に関係がある「コンポーネント」を持っています。他のコンポーネントに関する情報を「更新」したい場合、関連する「コンポーネント」とその関係を削除する必要があります enter image description hereDB内の行を削除する

。 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, 
     ]); 
    } 
} 

とビューで私はID(deletedIDs)で配列内の削除済みアイテムを取得するためのjQueryを使用して、関係および関連を削除するには、「アイテム」

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--; 
    }); 

すべては「理論」でOKですが、コンポーネントは

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

仕事、と私は($ deletedIDsを)のvar_dump場合、私は見て、DBに削除いけない やアイテムを持つ配列を得ました削除したいのですが、削除するときに「アイテム」に関連するコンポーネントは消えません。誰かが私が逃したものを教えてくれる?

+0

を配列であり、複数のIDが含まれています(私は自分自身を試してみましたが、 'deleteAll'方法は私には正常に動作し、それはおそらくあなたのケースで動作しますので、。あまりにも)。あなたが試みることができるのは 'try'を使って例外を得ることです(何が間違っているかを見るために)。 –

+0

私はそれを試してみましたが、データベース、var_dumpの作業でそれらを削除していないので、それらを捕まえて削除するつもりですが、実際には削除しないでください。要素を削除したいので、何かを見逃していると思いますが、何が分かりません)。そして、はい、配列は、私が削除したい各 "コンポーネント"からすべてのIDを作成します。 アレイ(3){ [0] => ストリング(2) "15" [1] => ストリング(2) "13" [2] => ストリング(2) "16" } – RosS

+0

[OK]をクリックし、データベースから直接行を削除して、それが可能かどうかを確認してください。 –

答えて

1

はそれを解決:

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

代わりの

Dependency::deleteAl‌​l(['id' => Yii::$app->request->‌​post()["deletedIds"]]‌​); 
関連する問題