如何将“删除”操作委托给 Cakephp 4 中的另一个模型?
Posted
技术标签:
【中文标题】如何将“删除”操作委托给 Cakephp 4 中的另一个模型?【英文标题】:How to delegate "delete" operation to another Model in Cakephp4? 【发布时间】:2021-12-02 18:21:26 【问题描述】:我有 2 个模型(SuperRubriques
和 CustomRubriques
)在 DB 中使用同一张表 rubriques
。
当我从SuperRubriques
删除时,我想将删除委托给CustomRubriques
(因为CustomRubriques
与extended_rubriques
有hasOne
关联,而SuperRubriques
不知道)。
关于信息,DB 中的 rubriques
表具有包含 'CustomRubriques'
的字段 model
(即保存它的模型)。
我已经尝试在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
(当我调试时)但是数据库中没有删除记录,我不知道为什么?
【问题讨论】:
【参考方案1】:我已经解决了这个问题:
我没有在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']);
【讨论】:
以上是关于如何将“删除”操作委托给 Cakephp 4 中的另一个模型?的主要内容,如果未能解决你的问题,请参考以下文章
自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?