我使用 Cake 控制台生成了一个模式文件,该模式文件使用 after() 方法在数据库中创建一些默认记录。
'schema create' 命令适用于默认数据库,但是当我尝试为我的测试数据库执行相同的命令并使用 --connection 参数时......发生了一些奇怪的事情。它确实在测试数据库下创建了表,但它试图在默认数据库中插入记录。
我认为这可能与 after() 方法有关。
// Works. Creates the tables and inserts records successfully to the default
Console/cake schema create -s 1
// Breaks. Creates the tables under test but attempts to insert record in the default database
Console/cake schema create -s 1 --connection test
这是我的架构文件:
<?php
// Use this Schema for all Stage_2.0 Releases
App::uses("ClassRegistry", "Utility");
App::uses("Shoe", 'Model');
class AppSchema extends CakeSchema {
public function before($event = array()) {
// the line below always outputs 'default'... even though --connection parameter is set to 'test'
debug($this->connection);
$db = ConnectionManager::getDataSource($this->connection);
$db->cacheSources = false;
return true;
}
public function after($event = array()) {
if(isset($event['create'])){
switch($event['create']){
case "shoes":
$this->InsertSampleShoes();
break;
}
}
}
public function InsertSampleShoes(){
$shoe = ClassRegistry::init("Shoe");
$records = array(
array(
"Shoe" => array(
"name" => "Shoe 1"
)
),
array(
"Shoe" => array(
"name" => "Shoe 2"
)
)
);
$shoe->saveAll($records);
}
// ... table name, column definitions etc ...
}