0

我有一个自定义数据源,我们称之为SQSDatasource。它工作正常,一般来说,对于find()save(),甚至delete()

class SQSDatasource extends DataSource {
    public function delete(Model $Model, $conditions = null) {

        // Deliberate break point to ensure that this function is being called
        print_r($conditions);
        exit();

        // I have my proper delete logic here, which works fine usually
    }
}

一个模型,说它Job使用SQSDatasource. 中没有特别的逻辑Job

然而,我遇到了一个奇怪的异常。

class TestShell extends AppShell {
    public $uses = array('Job');

    public function main() {
        // This works fine.
        $job = $this->Job->find('first');

        // The break point never gets called
        $this->Job->delete('TEST!');

        // This gets called
        $this->out('This gets called.');
    }
}

$this->Job->find()但是,如果我在调用之前删除$this->Job->delete(),它工作得很好。delete()会被调用。

有人对这个异常有任何线索吗?

4

2 回答 2

1

您没有任何用于查找的代码,例如在您的数据源中定义的 read() 函数。我怀疑在那里找到它失败了,因此没有进行删除。

删除查找后,不再有错误,并且删除工作正常。

查看数据源的文档并确保您已启用调试。可能检查日志以查找未显示的任何错误。

于 2012-07-30T18:13:44.363 回答
1

我已经设法找出问题所在。我的数据源代码实际上是完整的 , 等的完整实现read()create()所有标准的 CakePHP CRUD 函数都可以在我的数据源上正常工作。

我遇到的问题主要是由于以下原因:

  1. delete()在 CakePHP 中实际上find('count')在允许删除之前做了一个内部操作,这是我没想到的

  2. 的行为。当消息发送中时,它是暂时不可见的。

  3. 此外,对于,您不能在不先查询消息的情况下删除消息(因为删除不是通过消息 ID,而是通过消息处理程序)。一旦你开始查询它,它就会暂时不可见,这导致 CakePHP 认为删除是无效的。

于 2012-07-30T18:34:33.490 回答