笨迁移不能重新声明类(Codeigniter Migration cannot redeclare

2019-10-18 14:10发布

我试图复位功能添加到笨的迁移。 下面是我的代码:

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运行它们,一切都还好。 当一起提示错误。 任何想法?

Answer 1:

最有可能的,这个错误是设定你的迁移,如果他们不已经存在,缓存中的数据不被马上更新,以创建表的结果。

您的迁移脚本调用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);

这里有几个选项来避免这个问题:

  1. 仅发送表名作为参数传递给create_table方法
  2. 未设置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];



Answer 2:

最有可能的,您可以通过复制/粘贴从较早的一个制造迁移和现在有同一类两种迁移文件中声明

class Migration_Add_blog extends CI_Migration

在两个文件



文章来源: Codeigniter Migration cannot redeclare class