2016-04-19 26 views
1

これは私の移行です:Laravel - 整合性制約違反:1452

public function up() 
    { 
     Schema::table('payments', function($table) 
     { 
     $table->dropColumn('invoice_id'); 
     }); 
    } 

    public function down() 
    { 
     Schema::table('payments',function (Blueprint $table){ 
     $table->unsignedInteger('invoice_id')->index(); 
     $table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade'); 
     }); 
    } 

私はPHPの職人の移行を実行すると:それは私にこの例外を与えるロールバック:

[Illuminate\Database\QueryException]                           
    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq 
    l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE) (SQL: alter 
    table `payments` add constraint `payments_invoice_id_foreign` foreign key (`invoice_id`) references `invoices` (`id`) on delete cascade)  



    [PDOException]                                
    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq 
    l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE)  

いずれかが私を助けることができますか?

+0

何をしたいですか?あなたはデータベース内のテーブルを移行したいですか? –

+0

それは私にこの例外を与える [照らしなさい\データベース\のQueryException] SQLSTATE [23000]:整合性制約違反:1217は、削除または親行を更新できません:外部キー制約が失敗した(SQL:ドロップテーブル 'payments') –

+0

このhttp://pastebin.com/9dbGFPY3で試してください –

答えて

0

あなたはdownメソッドを実行していると仮定します。最初の行:

$table->unsignedInteger('invoice_id')->index(); 

が列をバック追加し、私はLaravelを知らないが、私はこれをカラムに0のデフォルト値を割り当てます推測しています。参照id欄には0値がない場合

$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade'); 

はそことして失敗していました。

invoice_id列をNULLにしてこれをデフォルト値として使用することで、これを動作させることができます。

私の最初のストップは、新しく追加された列invoice_idの値をチェックすることです。

0

私は通常、それはup()にだから、なぜあなたは、down()方法でこのロジックを持っているかわからないんだけど、これを実行しよう:

public function down() 
{ 
    Schema::table('payments', function (Blueprint $table){ 
     $table->unsignedInteger('invoice_id')->index(); 
    }); 

    Schema::table('payments', function (Blueprint $table){ 
     $table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade'); 
    }); 
} 
関連する問題