2017-04-05 67 views
0

我正在將Codeigniter 3.1.4開發環境轉移到Docker容器中。第一次運行Docker鏡像時,如果數據庫爲空,我希望Codeigniter自動在數據庫中創建表,而不必導出當前的開發數據庫,​​然後將其導入到Mysql泊塢窗中。如果數據庫爲空,如何運行Codeigniter遷移

我已經在開發過程中(通過命令行)使用遷移庫來更改數據庫模式。這聽起來像遷移圖書館將完美的這項任務,但我想不出我應該從哪裏來。例如。 - 我添加一些代碼到database.php的末尾來檢查數據庫是否存在,然後以某種方式調用我的遷移控制器?

回答

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訪問遷移控制器。這可能是一個更好的方法,但我還沒有弄清楚。