2016-03-21 2 views
1

Ich versuche, eine Migration mit Phalcon (Devtools 2.0.10) zu laufen, aber es hält beschweren sich über ERROR: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraintFehler: SQLSTATE [HY000]: Allgemeiner Fehler: 1215 Kann nicht Fremdschlüssel in Phalcon hinzufügen

Ich habe Lauf Migrationen mit dieser letzten Woche und sie alle gut, nicht sicher, was jetzt anders ist. Ich habe die Datenbank verschrottet, mysql neu installiert, die Datenbank neu erstellt, tut immer noch das Gleiche.

Das Problem scheint im Zusammenhang mit Fremdschlüsseln im Allgemeinen und nicht speziell diese zu sein. Es beginnt damit, sich über ein bestimmtes Modell zu beschweren, also entfernte ich die references-Anweisung nur, um zu sehen, und es stoppt bei der nächsten Fremdschlüssel-Deklaration und so weiter. Der Motor ist auf InnoDB gesetzt, die Typen der Schlüssel übereinstimmen und es läuft gut an der Maschine meines Kollegen so bin ich sicher, es ist keine Syntax Problem, sondern etwas Bestimmtes über SQL (Server)

class ModuleTranslationsMigration_100 extends Migration 
{ 

public function morph() 
{ 
$this->morphTable('', array(
... 
'references' => array(
    new Reference(
     'module_translations_ibfk_1', 
     array(
      'referencedSchema' => 'learning', 
      'referencedTable' => 'modules', 
      'columns' => array('module_id'), 
      'referencedColumns' => array('id') 
     ) 
    ), 
    new Reference(
     'module_translations_ibfk_2', 
     array(
      'referencedSchema' => 'learning', 
      'referencedTable' => 'languages', 
      'columns' => array('language_id'), 
      'referencedColumns' => array('id') 
     ) 
    ) 
), 
... 

class LanguagesMigration_100 extends Migration 
{ 

public function morph() 
{ 
    $this->morphTable('languages', array(
      'columns' => array(
       new Column(
        'id', 
        array(
         'type' => Column::TYPE_CHAR, 
         'notNull' => true, 
         'size' => 2, 
         'first' => true 
        ) 
       ), 
... 

class ModulesMigration_100 extends Migration 
{ 
    public function morph() 
    { 
     $this->morphTable('modules', array(
       'columns' => array(
        new Column(
         'id', 
         array(
          'type' => Column::TYPE_INTEGER, 
          'unsigned' => true, 
          'notNull' => true, 
          'autoIncrement' => true, 
          'size' => 10, 
          'first' => true 
         ) 
        ), 
    ... 
+0

Geben Sie die DDL-Anweisungen für die relevanten Tabellen an. Es ist ziemlich schwer (lies: unmöglich), dir mit so wenig Informationen zu helfen. – Mureinik

+0

@Mureinik hat einen hinzugefügt. Das Problem ist, dass wenn ich die Verweise-Anweisung in dieser Klasse entfernen, der gleiche Fehler mit dem nächsten Modell und dem nächsten auftritt. Außerdem laufen die Migrationen auf dem Rechner meines Kollegen, was mich zu der Annahme verleitet, dass es sich eher um ein SQL- (Server-) Problem als um Syntax/Modellierung handelt. – blackbird

+0

Ihr Problem wird mit Ihrer SQL-Konfiguration ausgegeben. Für detaillierte Hilfe sollten Sie uns Ihr SQL-Schema zur Verfügung stellen. Auch sollten Sie diese Antwort hier lesen: http://StackOverflow.com/questions/15534977/mysql-cannot-add-foreign-key-constraint – yergo

Antwort

0

Das Problem war, Fremdschlüssel auf SQL-Ebene, kein Problem mit der Syntax oder der DDL per se. Es sieht so aus, als ob Phalcon die Tabellen entweder in alphabetischer Reihenfolge in /migrations erstellt und die Tabellenstruktur nicht berücksichtigt.

Executing

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=0;

vor der Durchführung der Migration der Trick funktioniert, bevor es wieder natürlich einstellen.

Ich bin mir nicht sicher, dass es in diesem Fall notwendig war, aber ich entfernte alle mysql rpms, löschte das Verzeichnis /var/lib/mysql, bevor ich neu begann.

Verwandte Themen