我正在将我的Codeigniter 3.1.4开发环境移动到Docker容器中。当第一次运行docker镜像时,如果数据库为空,我希望Codeigniter自动在数据库中创建表,而不是我必须导出当前的开发数据库,然后将其导入到Mysql docker中。
我在开发期间(通过命令行)已经使用迁移库来更改数据库模式。听起来我觉得迁移库对于这个任务来说是完美的,但我想不出我应该从哪里调用它。例如。 - 我是否在database.php的末尾添加了一些代码来检查数据库是否存在,然后以某种方式调用我的迁移控制器?
答案 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访问迁移控制器。可能有一种更简洁的方法可以做到这一点,但我还没弄清楚怎么做。