2016-08-14 3 views
1

У меня есть «компоненты», которые я устанавливаю между ними, и если я хочу «обновить» информацию о некотором компоненте, связанном с другим, я должен удалить связанный «компонент» и отношение enter image description hereУдаление строк в DB yii2

. В 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, чтобы получить удаленные элементы в массиве с идентификатором (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--; 
    }); 

Все нормально на «теории», но компоненты Dont удалить в БД, я смотрю, если

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

работа, и я var_dump ($ deletedIDs) и получили массив с элементами Я хочу удалить, но компоненты, связанные с «элементом», когда я их удаляю, не исчезают. Может кто-нибудь сказать мне, что я пропустил?

+0

Я пробовал себя и 'метод deleteAll' отлично работает для меня (это массив и содержит несколько идентификаторов Так что, вероятно, работает в вашем случае, слишком). Вы можете попробовать использовать 'try' и получать исключения (чтобы понять, что не так). –

+0

Я пробовал, но это не удаляет их в базе данных, var_dump работает, и кажется, что они поймают их и собираются удалить их, но на самом деле не удаляют их, а это бит-бит (вот мой var_dump со всеми элементы, которые я хочу удалить, поэтому я думаю, что я что-то пропустил, но не могу понять, что). И да, массив объединяет каждый идентификатор из каждого «компонента», который я хочу удалить. массив (3) { [0] => строка (2) "15" [1] => строка (2) "13" [2] => строка (2) "16" } – RosS

+0

Итак, попробуйте удалить строку непосредственно из базы данных и посмотреть, разрешает ли она. –

ответ

1

решаемые его:.

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

вместо

Dependency::deleteAl‌​l(['id' => Yii::$app->request->‌​post()["deletedIds"]]‌​); 
Смежные вопросы