我正在使用 cake bake 命令来创建我的夹具和测试模型。我已经用我的一个模型成功地完成了它,但是我在另一个模型上遇到了麻烦。
我不知道为什么,它尝试使用默认数据库,而不是使用我已经定义的测试数据库,这是我测试的第一个模型使用的数据库。
两种测试模型,一个运行良好,第二个不运行,都是用蛋糕烘焙创建的,它们看起来完全一样。
他们两个在他们的夹具类中都有这个:
public $import = array('records' => true, 'connection' => '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*/
}
谢谢。
我已经更新了它。
最后更新和解决方案
问题是 Post Model 构造函数的初始化错误。使用复数是不相关的。就像使用任何不存在的模型一样。它将始终获取测试数据库。构造函数初始化良好的答案在这里: How to override model's constructor correct in CakePHP