Невозможно создать мой внешний ключ (1: n) ошибка 1215 - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь создать внешний ключ между таблицами пользователей и ролями (пользователь может иметь роль, роль может быть назначена нескольким пользователям)

Сначала я создал все свои миграции, а затем добавил файл с внешними ключами, чтобы убедиться, что все таблицы существуют.

Миграции:

enter image description here

Как вы можете видеть, см. последняя миграция касается внешних ключей, это код:

class CreateForeignKeys extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->unsignedBigInteger('role_id');

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

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

Это код моей миграции пользователя:

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('nom', 45);
            $table->string('prenom', 45);
            $table->string('team', 45)->nullable();
            $table->string('tel1', 45)->nullable();
            $table->string('tel2', 45)->nullable();
            $table->string('username', 50)->nullable();
            $table->string('password', 50)->nullable();
            $table->tinyInteger('is_active');
            $table->dateTime('created')->nullable();
            $table->dateTime('modified')->nullable();[![enter image description here][2]][2]
        });
    }

Это моя структура базы данных, как вы можете, У меня есть поле "role_id", но не ключ, показывающий внешний ключ, и у меня также есть эта ошибка:

И ошибка:

SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа (SQL: создать таблицу roles (id int без знака, не ноль, первичный ключ auto_increment, name varchar (100) ноль, description varchar (255) ноль) набор символов по умолчанию utf8mb4 сопоставить 'utf8mb4_unicode_ci')

Tapez un message

Спасибо Вам за помощь.

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы используете

$table->unsignedBigInteger('role_id');

Убедитесь, что тип столбца соответствует roles таблице id как

$table->bigIncrements('id');

Или измените его на

$table->integer('role_id');

Надеюсь, это поможет

0 голосов
/ 25 апреля 2020

Если вы хотите установить sh отношения между таблицами и поставить внешний ключ, вам не нужно создавать новую таблицу. Go к модели пользователей

public function example()
    {
        return $this->belongsTo(example::class,'insert foreign key);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...