Frage

In PHP Lehre ist es möglich, eine Migration Klasse zu erstellen, die eine Tabelle erstellt und erstellt einen Fremdschlüssel auf der Tabelle? Aus irgendeinem Grund kann ich nicht die Fremdschlüssel an die Arbeit ...

class Migration_001 extends Doctrine_Migration_Base {
    public function up() {
        $this->createTable('table_name', array(...))
        $this->createForeignKey('table_name', 'foreign_key_name', array(...))
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name')
        $this->dropTable('table_name')
    }
}

Danke, Ofir

War es hilfreich?

Lösung 3

meine eigene Frage zu beantworten, ist die Antwort ja.

Sie müssen überprüfen, ob alles in Ordnung ist, das heißt aber, dass die Spalten identisch sein sollten (Typ, Länge, etc.) und auch, dass der Fremdschlüssel ist ein eindeutiger Schlüssel in seinem eigenen Tisch (ich weiß nicht erinnern, aber vielleicht sollte es auch die erste Spalte sein).

Andere Tipps

Dies könnte nicht eine definitive Antwort, aber ich habe bemerkt, dass, wenn Sie die CLI verwenden Migrationen von einem bestehenden Schema zu erstellen, wird eine separate Lehre Migration generiert jede Tabelle zu erstellen und dann eine endgültige einzelne Migration erzeugen, die einrichtet alle Fremdschlüsselbeziehungen.

Ich würde versuchen, den Fremdschlüssel Schöpfung in eine separate Migration zu bewegen und sehen, ob das funktioniert.

Sie müssen die ‚foreign_key_name‘ Index hinzufügen, bevor Sie die Fremdschlüssel auf sie hinzufügen können. so:

class Migration_001 extends Doctrine_Migration_Base {

    public function up() {

        $this->createTable('table_name', array(...));
        $this->addIndex('table_name', 'foreign_key_name', array(
             'fields'=>array('local_id')
        ));
        $this->createForeignKey('table_name', 'foreign_key_name', array(
             'local' => 'local_id',
             'foreign' => 'id',
             'foreignTable' => 'foreign_table',
             'onDelete'=>'CASCADE'
        ));
    }

    public function down() {
        $this->dropForeignKey('table_name', 'foreign_key_name');
        $this->removeIndex('table_name', 'foreign_key_name');
        $this->dropTable('table_name');
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top