2017-04-05 1 views
0

Ich verschiebe im Moment meine Codeigniter 3.1.4-Entwicklungsumgebung in einen Docker-Container. Wenn ich zum ersten Mal ein Docker-Image ausführe, möchte ich, dass Codeigniter automatisch Tabellen in der Datenbank erstellt, wenn die Datenbank leer ist, anstatt dass ich meine aktuelle Entwicklungsdatenbank exportieren und sie dann in das Andockfenster von Mysql importieren muss.So führen Sie die Codeigniter-Migration aus, wenn die Datenbank leer ist

Ich verwende die Migrationsbibliothek bereits während der Entwicklung (über die Befehlszeile), um Änderungen am Datenbankschema vorzunehmen. Es klingt für mich wie die Migrationsbibliothek wäre perfekt für diese Aufgabe, aber ich kann nicht denken, wo ich es nennen sollte. Z.B. - füge ich am Ende von database.php etwas Code hinzu, um zu überprüfen, ob die Datenbank existiert, und dann meinen Migrationscontroller irgendwie aufzurufen?

Antwort

0

Ich habe einen Weg gefunden, dies zu erreichen. In der Klasse MY_Controller, die eine Klasse ist, die CI_Controller erweitert, überprüfe ich die Datenbank, um festzustellen, ob die Tabelle ci_sessions existiert. Wenn nicht, nehme ich an, dass die Datenbank leer ist und ich die Migration ausführen sollte. Hier ein Beispiel:

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'); 

    } 
} 

Beachten Sie, dass ich die Migration über einen Shell-Befehl ausführen. Dies ist erforderlich, um den URL-Zugriff auf den Migrationscontroller zu verhindern. Es könnte einen besseren Weg geben, dies zu tun, aber ich habe noch nicht herausgefunden, wie es geht.

Verwandte Themen