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 に答える