如何将 "delete" 操作委托给 Cakephp 4 中的另一个模型?
How to delegate "delete" operation to another Model in Cakephp4?
我有 2 个模型(SuperRubriques
和 CustomRubriques
)在数据库中使用相同的 table rubriques
。
当我从 SuperRubriques
删除时,我想将删除委托给 CustomRubriques
(因为 CustomRubriques
与 extended_rubriques
有 hasOne
关联SuperRubriques
不知道)。
有关信息,DB 中的 rubriques
table 字段 model
包含 'CustomRubriques'
(即保存它的模型)。
我已经尝试在 SuperRubriquesTable::beforeDete()
中做到了:
// In SuperRubriquesTable.php
public function beforeDelete(Event $event, EntityInterface $entity, ArrayObject $options)
{
$table = TableRegistry::getTableLocator()->get($entity->model); // $entity->model contains 'CustomRubriques'
$rubriqueEntity = $table->get($entity->id);
return $table->delete($rubriqueEntity);
}
但是$table->delete($rubriqueEntity)
是true
(我调试的时候)但是DB里面的记录没有删除,不知道为什么?
我已经解决了这个问题:
我没有在 SuperRubriquesTable::beforeDelete()
中委派,而是在 SuperRubriquesController::delete()
中完成了工作:
// In SuperRubriquesController
public function delete($id)
{
$this->request->allowMethod(['post', 'delete']);
$rubrique = $this->SuperRubriques->get($id);
$rubriqueModel = $rubrique->model;// contains 'CustomRubriques'
$this->loadModel($rubriqueModel);
$rubriqueEntity = $this->$rubriqueModel->get($id);
if ($this->$rubriqueModel->delete($rubriqueEntity)) {
return $this->redirect(['action' => 'index']);
}
}
我有 2 个模型(SuperRubriques
和 CustomRubriques
)在数据库中使用相同的 table rubriques
。
当我从 SuperRubriques
删除时,我想将删除委托给 CustomRubriques
(因为 CustomRubriques
与 extended_rubriques
有 hasOne
关联SuperRubriques
不知道)。
有关信息,DB 中的 rubriques
table 字段 model
包含 'CustomRubriques'
(即保存它的模型)。
我已经尝试在 SuperRubriquesTable::beforeDete()
中做到了:
// In SuperRubriquesTable.php
public function beforeDelete(Event $event, EntityInterface $entity, ArrayObject $options)
{
$table = TableRegistry::getTableLocator()->get($entity->model); // $entity->model contains 'CustomRubriques'
$rubriqueEntity = $table->get($entity->id);
return $table->delete($rubriqueEntity);
}
但是$table->delete($rubriqueEntity)
是true
(我调试的时候)但是DB里面的记录没有删除,不知道为什么?
我已经解决了这个问题:
我没有在 SuperRubriquesTable::beforeDelete()
中委派,而是在 SuperRubriquesController::delete()
中完成了工作:
// In SuperRubriquesController
public function delete($id)
{
$this->request->allowMethod(['post', 'delete']);
$rubrique = $this->SuperRubriques->get($id);
$rubriqueModel = $rubrique->model;// contains 'CustomRubriques'
$this->loadModel($rubriqueModel);
$rubriqueEntity = $this->$rubriqueModel->get($id);
if ($this->$rubriqueModel->delete($rubriqueEntity)) {
return $this->redirect(['action' => 'index']);
}
}