2016-06-20 5 views
0

Я действительно не знаю, что не так, но я не могу добавить ограничение внешнего ключа с этим запросом.Невозможно добавить ограничение внешнего ключа - Laravel Entrust

alter table `__acc_role_user` add constraint `__acc_role_user_user_id_foreign` foreign key (`user_id`) references `__acc_accounts` (`account_id`) on delete cascade on update cascade 

Как я создаю таблицу счетов?

Schema::create('__acc_accounts', function($table) 
    { 
     $table->integer('account_id')->increments(); 
     $table->integer('points')->default(0); 

     $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade'); 
    }); 

А затем Доверьте миграции (только проблемный раздел ниже):

Schema::create('__acc_role_user', function (Blueprint $table) { 
     $table->integer('user_id')->unsigned(); 
     $table->integer('role_id')->unsigned(); 

     $table->foreign('user_id')->references('account_id')->on('__acc_accounts') 
      ->onUpdate('cascade')->onDelete('cascade'); 
     $table->foreign('role_id')->references('id')->on('__acc_roles') 
      ->onUpdate('cascade')->onDelete('cascade'); 

     $table->primary(['user_id', 'role_id']); 
    }); 
+0

Вы добавили индекс в внешний ключ? –

+0

$ table-> integer ('account_id') -> increments(); должен быть unsigned() –

+0

Да, я добавил индекс к внешнему ключу. Когда я изменяю $ table-> integer ('account_id') -> increments(); to unsigned(), то я получаю ту же ошибку, но для таблицы __acc_accounts: SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа – Tesly

ответ

1

Это синтаксисом лучше:

/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('__acc_accounts', function($table) 
    { 
     $table->integer('account_id')->increments(); 
     $table->integer('points')->default(0); 
    }); 

    Schema::table('__acc_accounts', function(Blueprint $table) 
{ 
     $table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade'); 
    }); 
} 


/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('__acc_accounts'); 
} 

И очень важно! В вашем заказе на миграцию должно быть: сначала создать таблицу «учетные записи» и после «__acc_accounts».

Tables with foreign keys should be created after the tables they reference to have been created.

Это http://blog.kongnir.com/2015/03/08/laravel-order-of-migrations-with-foreign-keys/ может помочь вам ту понять это.