SoftDelete行为CakePHP - 删除问题

时间:2012-05-22 06:21:09

标签: cakephp soft-delete

我正在使用CakeDC的utils包中的Soft Delete - Behavior (https://github.com/CakeDC/utils

现在的问题是:我想检查控制器是否软件(已删除),如下所示:

<?php
  if ($this->User->delete($id)) {
    $this->Session->setFlash(__('user has been deleted'));
  } else {
    $this->Session->setFlash(__('user has not been deleted'));
  }
 ?>

不幸的是,我的结果出错了。意味着如果用户被(软)删除,我将得到'用户未被删除'消息,反之亦然。

我知道Cake如何处理此请求,而beforeDelete挂钩必须返回false,以停止(硬)删除数据。但是在github上引用这个issue,现在应该修复它。 我是唯一一个不起作用的人吗?

除了简单地否定这个问题外,还有其他解决方法吗? (不想这样做,它只是不对)

提前致以问候和谢意!
nahri

1 个答案:

答案 0 :(得分:0)

我使用的解决方案是一半复制,一半是从@mark链接到的线程写的。

将其添加到您的AppModel

/**
 * Override the delete() model method so that we can account for the
 * SoftDelete behaviours return
 *
 * @param int $id
 * @param bool $cascade
 * @return bool
 */
    public function delete($id = null, $cascade = true) {
        $result = parent::delete($id, $cascade);
        if ($result === false && $this->Behaviors->enabled('SoftDelete')) {
            return $this->field('deleted', array('deleted' => 1));
        }
        return $result;
    }

请注意使用行为default设置的此代码段。这就是为什么我使用'deleted' => 1如果您以不同的方式命名您的字段,那么您将要更改此字段。