У меня есть «компоненты», которые я устанавливаю между ними, и если я хочу «обновить» информацию о некотором компоненте, связанном с другим, я должен удалить связанный «компонент» и отношение Удаление строк в 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) и получили массив с элементами Я хочу удалить, но компоненты, связанные с «элементом», когда я их удаляю, не исчезают. Может кто-нибудь сказать мне, что я пропустил?
Я пробовал себя и 'метод deleteAll' отлично работает для меня (это массив и содержит несколько идентификаторов Так что, вероятно, работает в вашем случае, слишком). Вы можете попробовать использовать 'try' и получать исключения (чтобы понять, что не так). –
Я пробовал, но это не удаляет их в базе данных, var_dump работает, и кажется, что они поймают их и собираются удалить их, но на самом деле не удаляют их, а это бит-бит (вот мой var_dump со всеми элементы, которые я хочу удалить, поэтому я думаю, что я что-то пропустил, но не могу понять, что). И да, массив объединяет каждый идентификатор из каждого «компонента», который я хочу удалить. массив (3) { [0] => строка (2) "15" [1] => строка (2) "13" [2] => строка (2) "16" } – RosS
Итак, попробуйте удалить строку непосредственно из базы данных и посмотреть, разрешает ли она. –