Cakephp 从数据源中删除()不会在find()之后立即触发

Cakephp 从数据源中删除()不会在find()之后立即触发,cakephp,amazon-sqs,Cakephp,Amazon Sqs,我有一个自定义数据源,我们称之为SQSDatasource。通常,对于find(),save(),甚至delete(),它都可以正常工作 使用SQSDatasource的模型,例如Job。作业中没有异常的逻辑 然而,我遇到了一个奇怪的反常现象 class TestShell extends AppShell { public $uses = array('Job'); public function main() { // This works fine.

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

使用
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->delete()
之前删除
$this->Job->find()
,它就可以正常工作<代码>删除()
将被调用


有人对此异常有任何线索吗?

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

删除“查找”后,就不会再有错误,删除也可以正常工作


请查看的文档,并确保已启用调试。可能会检查日志中没有显示的任何错误。

我已设法找出问题所在。我的数据源代码实际上已经完成了
read()
create()
等的完整实现,所有标准的CakePHP CRUD函数都可以很好地与我的数据源配合使用

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

  • CakePHP中的
    delete()
    实际上在允许删除之前在内部执行
    find('count')
    ,这是我没有预料到的

  • 的行为。当消息在传输中时,它暂时不可见

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


  • 谢谢你回答这个问题。我已经大致找到了问题所在,部分原因是由于两个原因:I)Amazon SQS的不一致性;ii)我从不希望datasource在删除之前先进行查找(“计数”)。只是为了记录,datasource实际上是通过
    read()
    等完全实现的。我在下面对这个问题进行了解释。谢谢
    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.');
        }
    }