3 Stimmen

Codeigniter-Migrationen + mehrere Tabellen + eine Migrationsdatei pro Tabelle

Ich möchte anfangen, DBForge und Migrationsklasse zu verwenden, die in CI eingebaut ist, aber ich bin nicht sicher, wie ich Migrationen für alle meine Tabellen erstellen kann.

Meine Überlegungen gehen dahin, in meinem Installationsprozess eine Migrationsdatei für jede der folgenden Tabellen zu haben: advertisements, announcements, config, users, points .. Wenn der Benutzer die App installiert, wird sie automatisch durch diese Migrationsdateien laufen und die Tabellen erstellen.

IE: 001_advertisements, 001_announcements, 001_config, 001_users, 001_points

001_Karte_Werbung

class Migration_map_advertisements extends CI_Migration {

public function up(){
    $this->dbforge->add_field(array(
        'id' => array(
            'type' => 'INT',
            'constraint' => 11,
            'unsigned' => TRUE,
            'auto_increment' => TRUE
        ),
        'youtube_id' => array(
            'type' => 'VARCHAR',
            'constraint' => '255',
        ),
        'status' => array(
            'type' => 'int',
            'constraint' => 11,
            'null' => FALSE,
            'default' => 1
        ),
        'timestamp' => array(
            'type' => 'int',
            'constraint' => 11
        ),
        'type' => array(
            'type' => 'VARCHAR',
            'default' => 'video'
        ),
        'filename' => array(
            'type' => 'VARCHAR',
            'constraint' => '255'
        ),
        'url' => array(
            'type' => 'varchar',
            'constraint' => '255'
        ),
        'description' => array(
            'type' => 'varchar',
            'constraint' => 64
        ),
        'title' => array(
            'type' => 'varchar',
            'constraint' => 64
        )
    ));
    $this->dbforge->create_table('map_advertisements', TRUE);
}

public function down()
{
    $this->dbforge->drop_table('map_advertisements');
}

Wenn ich dies jedoch tue und versuche, einen gesicherten Controller zu betreiben:

class Developer extends ADMIN_Controller {
function __construct(){
    parent::__construct();
} #end constructor function
public function migrate($index){
    $this->load->library('migration');

    if ( !$this->migration->version($index) ){
        show_error($this->migration->error_string());
    }else{
        echo 'migrated';
    }

}
}

Ich erhalte eine Fehlermeldung, die besagt, dass es mehrere version 1 Migrationen und schlägt den Migrationsprozess fehl. Gibt es eine andere Möglichkeit, dies in CI zu tun?

8voto

landons Punkte 9454

Ja, Sie können nur eine Migrationsdatei pro Version haben. Eine Migration ist nicht tabellenspezifisch, sondern eher so: "Welche Schemaänderungen sind erforderlich, um von Version x zu Version x+1 meiner Anwendung zu wechseln?"

Fassen Sie alle vorhandenen Migrationsdateien zu einer einzigen zusammen und nennen Sie sie etwa so 001_initial_schema.php . Wenn Sie dann ein neues Merkmal hinzufügen, erstellen Sie eine neue Schemadatei für dieses Merkmal. Wenn Sie einen Verteilungszyklus haben (wie wöchentliche SCRUM-Sprints), ist es gut, eine dieser Migrationsdateien pro Verteilung zu haben.

1voto

Selon le http://www.codeigniter.com/user_guide/libraries/migration.html Die beste Methode zur "Versionierung" Ihrer Migrationen ist die Verwendung des Formats JJJJMMTTHHMMSS. Auf diese Weise lassen sich Probleme mit der Versionierung effektiv lösen. Es wird auch vorgeschlagen, dass, wenn der Dateiname "201507071208_advertisements.php" lautet, die enthaltene Migrationsklasse "Migration_Advertisements" heißen sollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X