2016-03-21 80 views
1

我試圖運行與爾康遷移(Devtools 2.0.10)添加外鍵約束,但它一直在抱怨ERROR: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint錯誤:SQLSTATE [HY000]:常規錯誤:1215無法在爾康

我已經上週運行遷移,他們都運行良好,不知道現在有什麼不同。我已經報廢了數據庫,重新安裝了mysql,重新創建了數據庫,仍然做同樣的事情。

這個問題似乎與一般的外鍵有關,而不是特定的這些。它首先是抱怨一個特定的模型,所以我刪除了references聲明只是爲了看到,它停在下一個外鍵聲明等等。該發動機被設置爲InnoDB的,該類型的鑰匙匹配,並且它,所以我敢肯定,它不是一個語法問題,而是具體的一些關於SQL(服務器)

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

請提供相關表格的DDL語句。這是很難(閱讀:不可能),以幫助你這麼少的信息 – Mureinik

+0

@Mureinik增加了一個。問題是如果我刪除這個類中的引用語句,下一個模型和下一個模型會出現相同的錯誤。此外,遷移運行在我的同事的機器上,這導致我認爲它更像是一個SQL(服務器)問題,而不是語法/建模 – blackbird

+0

您的問題與您的SQL配置一起發佈。有關詳細幫助,您應該向我們提供您的SQL shema。你也應該看看這裏的答案:http://stackoverflow.com/questions/15534977/mysql-cannot-add-foreign-key-constraint – yergo

回答

0

問題是運行我的同事的機器上細SQL級別的外鍵,而不是語法或DDL本身的問題。看起來Phalcon將以/migrations的字母文件順序創建表格,並且不考慮表格結構。

執行

mysql> SET GLOBAL FOREIGN_KEY_CHECKS=0;

運行遷移的伎倆之前,設置回當然之前。

我不確定在這種情況下有必要,但我刪除了所有的mysql rpms,在重新開始之前刪除了/var/lib/mysql目錄。

相關問題