删除DB yii2中的行
我有“组件”,我在它们之间建立关系,如果我想“更新”与其他组件相关的某些组件的信息,我必须删除相关的“组件”和关系 。在actionUpdate中,我有:删除DB yii2中的行,yii2,relational-database,sql-delete,Yii2,Relational Database,Sql Delete,我有“组件”,我在它们之间建立关系,如果我想“更新”与其他组件相关的某些组件的信息,我必须删除相关的“组件”和关系 。在actionUpdate中,我有: public function actionUpdate($id) { $model = Component::find()->where(['id' => $id])->one(); $tractorModels = ArrayHelper::map(Tractormodel::find()->a
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--;
});
工作,和我变量转储($deletedIDs)
得到了一个数组,里面有我想删除的项目,但是当我删除它们时,与“项目”相关的组件并没有消失。有人能告诉我我错过了什么吗?解决了这个问题:
Yii::$app->db->createCommand()->delete('dependency', ['dependent_id' => $deletedIDs])->execute();
而不是
Dependency::deleteAll(['id' => Yii::$app->request->post()["deletedIds"]]);
我自己尝试过,并且
deleteAll
方法对我来说很好(它是数组,包含多个ID。所以它可能也适用于您的情况)。你可以尝试的是使用try
并获取异常(看看有什么问题)。我尝试了,但它不会在数据库中删除它们,var_dump work,它似乎会捕获它们并将其删除,但实际上不会删除它们,这有点夸张(这是我想要删除的所有元素的var_dump,所以我想我错过了一些东西,但不知道是什么)。是的,数组包含了我想要删除的每个“组件”的每个ID。数组(3){[0]=>string(2)“15”[1]=>string(2)“13”[2]=>string(2)“16”}好的,然后尝试直接从数据库中删除行,看看它是否允许删除.1行。(查询花费了0.0550秒。),直接从phpmyadmin中删除,在刷新时,它们只保留与“主组件”相关的2个“组件”。好的,这不是我所期望的。我稍后再看,现在我时间不够。
Dependency::deleteAll(['id' => Yii::$app->request->post()["deletedIds"]]);