ケーキベイクコマンドを使用して、フィクスチャとテストモデルを作成しています。私は自分のモデルの1つでそれを成功させましたが、別のモデルで問題が発生しています。
理由はわかりません。定義済みのテストDBではなく、デフォルトのDBで動作しようとします。これは、テストした最初のモデルで使用されたものです。
うまく機能するテストモデルと機能しない2番目のテストモデルはどちらもケーキベイクで作成されており、まったく同じように見えます。
それらの両方は、フィクスチャクラスにこれを持っています:
public $import = array('records' => true, 'connection' => 'test');
Testは、テストデータベースへの接続を定義します。何が問題になる可能性がありますか?
私は何か奇妙な実験をしました。私のテストモデルでは、複数形の代わりに単数形を使用すると、デフォルトのDBで動作しますが、複数形に変更すると、テストデータベースで動作します。(ただし、モデルからメソッドを呼び出すことはできません。find()などの定義されたメソッドのみを呼び出すことができます)。
例えば:
public function setUp() {
parent::setUp();
//uses the default DB (i dont know why)
$this->Post = ClassRegistry::init('Post');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //works well
//uses the default Test Database (i dont know why either)
$this->Post = ClassRegistry::init('Posts');
print_r($this->User->find('all'));
$this->Post->updatePostsStatus(1); //doesn't work. No function found.
/*SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'updatePostsStatus' at line 1*/
}
ありがとう。
更新しました。
最終更新と解決策
問題は、PostModelコンストラクターの初期化が不適切だったことです。複数形の使用は関係ありませんでした。これは、存在しないモデルを使用するようなものです。常にテストデータベースを取得します。コンストラクターを適切に初期化するための答えは次のとおりです 。CakePHPでモデルのコンストラクターを正しくオーバーライドする方法