我试图复位功能添加到笨的迁移。 下面是我的代码:
class Migration extends Backend_Controller {
public function __construct()
{
parent::__construct();
$this->load->library('migration');
}
public function index()
{
//...
}
public function reset()
{
$this->migration->version(1);
$this->db->truncate('ci_sessions');
$this->migration->current();
}
}
它会返回错误:
Fatal error: Cannot redeclare class Migration_Create_geo_data in D:\web_projects\vProject\framework\application\migrations\002_create_geo_data.php on line 44
如果我seperately运行它们,一切都还好。 当一起提示错误。 任何想法?
最有可能的,这个错误是设定你的迁移,如果他们不已经存在,缓存中的数据不被马上更新,以创建表的结果。
您的迁移脚本调用DB_forge::create_table
方法,它有两个参数。 参数是一个表名和参数的两个是可选的。 这是if_not_exists
标志。 默认值为false然而, 如果它被设置为true的表,如果他们不存在,才会创建。
如果你的表与创建if_not_exists
设置为false缓存问题参数将(可能)永远不会发生:
$this->dbforge->create_table('table_name');
如果表与创建if_not_exists
设置为true的参数,您将需要强制高速缓存重装迁移何时更新。
$this->dbforge->create_table('table_name', TRUE);
这里有几个选项来避免这个问题:
- 仅发送表名作为参数传递给
create_table
方法 - 未设置
data_cache['table_names']
的后migration->version(0)
呼叫
如果您选择选项2,这里是一个可行的方法:
public function reset() {
$this->load->library('migration');
if (!$this->migration->version(0)) {
echo $this->migration->error_string();
}
// unset table cache - this will force it to update
unset($this->db->data_cache['table_names']);
if (!$this->migration->current()) {
echo $this->migration->error_string();
}
}
除此之外,迁移文件自动加载和保存在会话。 我在系统/库/ Migration.php改变这一行: include $f[0];
到include_once $f[0];
最有可能的,您可以通过复制/粘贴从较早的一个制造迁移和现在有同一类两种迁移文件中声明
即
class Migration_Add_blog extends CI_Migration
在两个文件