2015-04-15 3 views
0

Я добавил некоторые миграции для создания таблиц SQL в приложении laravel.Основная длина ключа в SQL

Таблица пользователей

public function up() 
    { 
     Schema::create('users', function(Blueprint $table) 
     { 
      $table->increments('id'); 
      $table->string('user_id')->unique(); 
      $table->string('email')->unique(); 
      $table->string('password', 60); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 
    } 

Таблица UserRoles

public function up() 
{ 
    Schema::create('userroles', function(Blueprint $table) 
    { 
     $table->foreign('user_id')->references('user_id')->on('users'); 
     $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

Но когда я запускаю их, я получаю ошибку:

[Illuminate\Database\QueryException]                                               
    SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'user_id' doesn't exist in table (SQL: alter table `userroles` add constraint userroles_user_id_foreign foreign key (`user_id`) references `users` (`user 
    _id`))  

Почему? Думаю, вторая запись в таблице пользователей «user_id», как и ожидалось? Должен ли этот столбец быть ПК? И как этот столбец будет иметь идентификаторы GUID в качестве записей, подходит ли вообще GUID как ПК?

ответ

2

В таблице userroles вам необходимо сначала определить ключи перед их настройкой для внешнего ключа.

public function up() 
{ 
    Schema::create('userroles', function(Blueprint $table) 
    { 
     $table->string('user_id'); 
     $table->unsignedInteger('role_id'); 
     $table->foreign('user_id')->references('user_id')->on('users'); 
     $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 
Смежные вопросы