Если вы хотите сослаться на внешний ключ, пожалуйста, не создавайте его с
$table->integer('role_id')->unsigned();
, вместо этого вы должны использовать
$table->unsignedInteger('role_id');
Это связано с документами из части миграции: Laravel Migrations .
Таким образом, ваше новое утверждение должно выглядеть так:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->unsignedInteger('role_id');
$table->foreign('role_id')->references('id')->on('user_role')->onDelete('cascade');
$table->rememberToken();
$table->timestamps();
});
}
Редактировать:
После того, как автор добавил код миграции user_role таблица проблема ясна.
Таблица, на которую ссылается автор, называется user_roles , а не как указано в миграции внешнего ключа user_role .
Итак, вот миграция, которая должна работать для таблицы users .
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->unsignedInteger('role_id');
$table->foreign('role_id')->references('id')->on('user_roles')->onDelete('cascade'); // change this line
$table->rememberToken();
$table->timestamps();
});
}
Именование связано с соглашением об именовании Laravel, в котором все таблицы названы во множественном числе, а все модели названы в единственном числе.
Edit 2:
OP упомянул, что у него были миграции в неправильном порядке, что было причиной неработающей миграции.
Таблица users создана перед таблицей user_roles .Вот почему внешний ключ вызывает ошибку.
Надеюсь, это поможет вам!Если у вас возникли проблемы, пожалуйста, дайте мне знать!