删除数据库 yii2 中的行
Deleting rows in DB yii2
我有 "components" 我在它们之间建立关系,如果我想 "update" 一些组件的信息与其他相关,我必须删除相关的 "component" 和关系
。在 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) ,并删除关系和相关 "items" 到组件
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--;
});
在 "theory" 上一切正常,但数据库中的组件没有删除,我看看
if ($deletedIDs && is_array($deletedIDs)) {
Dependency::deleteAll(['IN', 'id', $deletedIDs]);
}
工作,我 var_dump($deletedIDs)
并获得了包含我要删除的项目的数组,但是当我删除它们时与 "item" 相关的组件不会消失。谁能告诉我我想念什么?
已解决:
Yii::$app->db->createCommand()->delete('dependency', ['dependent_id' => $deletedIDs])->execute();
而不是
Dependency::deleteAll(['id' => Yii::$app->request->post()["deletedIds"]]);
我有 "components" 我在它们之间建立关系,如果我想 "update" 一些组件的信息与其他相关,我必须删除相关的 "component" 和关系
。在 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) ,并删除关系和相关 "items" 到组件
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--;
});
在 "theory" 上一切正常,但数据库中的组件没有删除,我看看
if ($deletedIDs && is_array($deletedIDs)) {
Dependency::deleteAll(['IN', 'id', $deletedIDs]);
}
工作,我 var_dump($deletedIDs) 并获得了包含我要删除的项目的数组,但是当我删除它们时与 "item" 相关的组件不会消失。谁能告诉我我想念什么?
已解决:
Yii::$app->db->createCommand()->delete('dependency', ['dependent_id' => $deletedIDs])->execute();
而不是
Dependency::deleteAll(['id' => Yii::$app->request->post()["deletedIds"]]);