2

我正在使用 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 上提到这个问题,现在应该已经修复了。我是唯一一个这不起作用的吗?

除了简单地否定条件之外,还有其他解决此问题的方法吗?(不想那样做,这是不对的)

提前问候和感谢!
纳赫里

4

1 回答 1

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如果您以不同的方式命名您的字段,那么我使用它,那么您将想要更改它。

于 2013-05-02T08:16:27.363 回答