如何将“删除”操作委托给 Cakephp 4 中的另一个模型?

Posted

技术标签:

【中文标题】如何将“删除”操作委托给 Cakephp 4 中的另一个模型?【英文标题】:How to delegate "delete" operation to another Model in Cakephp4? 【发布时间】:2021-12-02 18:21:26 【问题描述】:

我有 2 个模型(SuperRubriquesCustomRubriques)在 DB 中使用同一张表 rubriques

当我从SuperRubriques 删除时,我想将删除委托给CustomRubriques(因为CustomRubriquesextended_rubriqueshasOne 关联,而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 中的另一个模型?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 从 URL 中删除索引操作

自 iOS 7 中的删除(退格)操作以来,我如何才能不接收 UITextView 委托消息?

extjs 4.2.1 - 工具栏和将点击事件委托给按钮

bootstrap 3 确认 cakephp 中的删除模式

如何在 cakephp4 中使用 Admad cakephp-glide 删除 Glide 缓存?

使用 jquery 调用 cakephp 动作并将数组作为参数传递