0

CakePHP 2.0 アプリで何かをテストしようとしているときに、最も奇妙な問題が発生しました。データベースにクエリを実行して、アプリが過去 25 日間に通知を送信したかどうかを確認する関数をモデル内に持っています。

public function checkIfNotified($userId){
    $query = 'SELECT count(`user_id`) AS notify '.
        'FROM `churn_stats` '.
        'WHERE `user_id` = '. $userId.' '.
        'AND `notified` = 1 '.
        'AND TIME_TO_SEC(TIMEDIFF(NOW(),`created`)) <= 2160000 ';
        $this->log($query);
    $result = $this->query($query);
    return $result;
}

メソッドが機能するかどうかを確認するためにいくつかの単体テストを行っているので、レコードを作成して、次のように true を返すことをテストしようとしています。

$data['notified'] = 1;
$data['user_id'] = $userId;
$this->ChurnStats->create();
$this->ChurnStats->save($data);
$notified = $this->ChurnStats->checkIfNotified($userId);
print_r($notified);

結果が次のようになった後 (既に行を挿入しているため、これは間違った結果です!):

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [notify] => 0
                )

        )

)

ただし、DB のコードによって生成された正確なクエリを実行すると、結果は次のようになります。 ここに画像の説明を入力

私はすでに多くの時間を失っており、何が問題なのかわかりません:(。

4

1 に答える 1

0

すべてをテストしてチェックした後、次のテストのDBまたはクエリを何らかの形で変更していたのは別のテスト関数でしたが、奇妙な部分は、他のテストが同じクエリを呼び出したが、挿入、更新、または削除ができなかったことです。次のテストの結果または環境を変更します。

すべてをチェックした後、すべてが次のようになりました。クエリキャッシュ、デフォルトでは、CakePHP はすべての $this->query("..."); をキャッシュします。が呼び出されるので、修正は非常に簡単でした。非アクティブ化してください。

$result = $this->query($query, false);
于 2013-07-12T20:11:34.457 に答える