如果数据库为空,如何运行Codeigniter迁移

时间:2017-04-05 16:18:38

标签: php mysql docker codeigniter-3

我正在将我的Codeigniter 3.1.4开发环境移动到Docker容器中。当第一次运行docker镜像时,如果数据库为空,我希望Codeigniter自动在数据库中创建表,而不是我必须导出当前的开发数据库,​​然后将其导入到Mysql docker中。

我在开发期间(通过命令行)已经使用迁移库来更改数据库模式。听起来我觉得迁移库对于这个任务来说是完美的,但我想不出我应该从哪里调用它。例如。 - 我是否在database.php的末尾添加了一些代码来检查数据库是否存在,然后以某种方式调用我的迁移控制器?

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来实现这一目标。在MY_Controller类中,这是一个扩展CI_Controller的类,我检查数据库以查看表ci_sessions是否存在。如果没有,我假设数据库是空的,我应该运行迁移。这是一个例子:

class MY_Controller extends CI_Controller {

    function __construct() {
        parent::__construct();

        // If ci_sessions doesn't exist, run db migration (via command-line)
        if (!$this->db->table_exists('ci_sessions')) {
            $output = shell_exec("php index.php migrate");
            if (strncmp($output, "Migration worked!", 17) != 0) {
                exit($output);
            }
        }

        $this->load->library ( 'session' );
        $this->load->model ( 'user_model' );

    }
}

请注意,我是通过shell命令运行迁移的。这是为了防止URL访问迁移控制器。可能有一种更简洁的方法可以做到这一点,但我还没弄清楚怎么做。