Laravel 5.3 - Неправильно сформировано ограничение внешнего ключа - PullRequest
0 голосов
/ 10 июня 2018

Использование Laravel 5.3 и модели Eloquent, Попытка создать пользовательскую модель для подражания.основная схема, что у меня есть 2 таблицы пользователи и роли , у каждого пользователя есть роль, и у каждой роли есть много пользователей (отношение один ко многим).

, когда яя пытаюсь сделать внешний ключ в таблице user , которая ссылается на идентификатор в таблице role , это дает мне эту ошибку

В строке Connection.php 647:

SQLSTATE [HY000]: общая ошибка: 1005 Невозможно создать mydata таблицы. # Sql-7e0_71 (errno: 150 «Ограничение внешнего ключа сформировано неправильно») (SQL: изменить таблицу «пользователь» добавить ограничениеВнешний ключ «user_role_id_foreign» («role_id») ссылается на роли («id»))

В строке 449 Connection.php:

SQLSTATE [HY000]: общая ошибка: 1005 Не удается создатьтаблица mydata. # sql-7e0_71 (номер ошибки: 150 «Ограничение внешнего ключа сформировано неправильно»)

Примечание: Я использую команду ремесленника migrate, и я 'я попробовал эти ответы 1 , 2

вот моя up() функция для моего пользователя migratiна

public function up()
    {
        Schema::create('user', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->integer('role_id')->unsigned();
            $table->string('remember_token')->nullable();
            $table->timestamps();

            $table->foreign('role_id')->references('id')->on('role');
        });
    }

и на роль стол

public function up()
{
    Schema::create('role', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });
}

1 Ответ

0 голосов
/ 10 июня 2018

Вы пытаетесь добавить внешний ключ, имеющий ссылку на таблицу roles (->on('roles')), но в своем файле миграции вы создаете таблицу с именем role (Schema::create('role', ...).Вы должны соответствовать тем.

Либо измените имя таблицы ролей на roles, либо укажите ссылку на таблицу role.

...