Cannot add foreign key constraint

Dalam kasus develop sebuah aplikasi yang menggunakan framework laravel saya menemukan sebuah error yang sangat luar biasa memakan waktu untuk trouble shotnya cukup lama, output error nya :

 

[Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `pendapatan_harians` add constraint `pendapatan_harians_company_id_foreign` foreign key (`comp
  any_id`) references `companies` (`id`) on delete cascade)

Lalu cari - cari reference cara menyelesaikannya dan ketemu pada sebuah blog ini linknya Blog Reference jadi didalam membuat migration pada laravel tabel yang menjadi reference harus di buat lebih awal dari pada tabel yang akan dibuatkan foreign key:

Migrati error karena pembuatan foreign key seperti ini :

  1. 2014_01_01_00001_create_profiles_table.php
    • Foreign key company_id references to id of table companies
  2. 2014_01_01_00002_create_contacts_table.php
    • Foreign key contacttype_id references to id of table contacttypes
  3. 2014_01_01_00003_create_companies_table.php
  4. 2014_01_01_00004_create_contacttypes_table.php

Bisa kita lihat bahwa kita membuat foreign key namun tabel yang dibuat reference untuk foreign key belakangan di buatnya, jika menemukan kasus seperti ini solusinya adalah dengan cara delete migrationnya terlebih dahulu dan susunan migration menjadi seperti ini :

  1. 2014_01_01_00001_create_companies_table.php
  2. 2014_01_01_00002_create_contacttypes_table.php
  3.  2014_01_01_00003_create_profiles_table.php
    • Foreign key company_id references to id of table companies
  4.  2014_01_01_00004_create_contacts_table.php
    • Foreign key contacttype_id references to id of table contacttypes

Ya memang resikonya adalah merubah semua tabel terkait, mau tidak mau jika kita ingin menggunakan feature ini dan tidak menemukan masalah ketika menjalankan syntak php artisan migrate.

Di dalam kasus ini saya juga sangat bingung karena tabel pada database sudah sangat banyak, untuk solusinya adalah rename migration file ke unique tgl sebelum tabel - tabel yang akan di buatkan relasi, misalkan 2014_01_01_00003_create_profiles_table.php maka kita harus membuat master yang dijadikan tabel reference di atas nama tanggal tersebut misalkan menjadi 2014_01_01_00002_create_contacttypes_table.php sehingga migration pada laravel akan berjalan dengan normal lagi.

Semoga bermanfaat ya.

Related Articles

Comments