Внешний ключ сформирован неправильно

Когда я изменил свой первичный ключ с инкрементов на строку (user_id), я получил ошибку при миграции. Кажется, я не понимаю, где я ошибся. мои файлы миграции были в порядке, пока я не перешел с (-> приращения, а другой -> целое число) на (-> строка на обоих). Проблема в том, что когда он переносит таблицу clanmembers, он говорит, что внешний ключ сформирован неправильно.

Мой код раньше. Вроде все нормально, ничего страшного с миграцией в cmd

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('user_id');
        $table->string('fname', 50);
        $table->string('lname', 50);
        $table->integer('age');
        $table->string('gender', 10);
        $table->string('address', 50);
        $table->timestamps();
    });
}

public function up()
{
    Schema::create('clanmembers', function (Blueprint $table) {
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('user_id')->on('users')->onDelete('cascade');
        $table->integer('clan_id')->unsigned();
        $table->foreign('clan_id')->references('clan_id')->on('clans')->onDelete('cascade');
        $table->string('bandrole', 50);
        $table->timestamps();
    });
}

Мой код теперь после того, как я изменил -> инкременты и -> целое число на оба -> строку

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->string('user_id');
        $table->string('fname', 50);
        $table->string('lname', 50);
        $table->integer('age');
        $table->string('gender', 10);
        $table->string('address', 50);
        $table->timestamps();
    });
}

public function up()
{
    Schema::create('clanmembers', function (Blueprint $table) {
        $table->string('user_id');
        $table->foreign('user_id')->references('user_id')->on('users')->onDelete('cascade');
        $table->integer('clan_id')->unsigned();
        $table->foreign('clan_id')->references('clan_id')->on('clans')->onDelete('cascade');
        $table->string('clanrole', 50);
        $table->timestamps();
    });
}

person Ralph    schedule 30.07.2017    source источник


Ответы (2)


Таблица первая

 public function up()
    {
        //
       Schema::create('table_1', function (Blueprint $table) {
        $table->string('user_id',100);
        $table->string('fname', 50);
        $table->string('lname', 50);
        $table->integer('age');
        $table->string('gender', 10);
        $table->string('address', 50);
        $table->timestamps();
        $table->primary(['user_id']);
    });
   }

Таблица 2

public function up()
    {
        //
       Schema::create('clanmembers', function (Blueprint $table) {
        $table->string('user_id',100);
        $table->foreign('user_id')->references('user_id')->on('table_1')
        ->onDelete('cascade');
        $table->timestamps();
    });
   }
person Masud Miah    schedule 30.07.2017
comment
это сработало. большое спасибо! Я ценю это. Извините за задержку - person Ralph; 30.07.2017
comment
Добро пожаловать. Мне также жаль, что в последнее время я дал правильный ответ. - person Masud Miah; 30.07.2017

вам нужно установить длину строки $ table-> string ('user_id', 100); для типа intiger, если длина не задана, автоматически выбирается значение по умолчанию 11. Но для строки вам необходимо установить его.

person Masud Miah    schedule 30.07.2017
comment
Я уже пробовал указать длину (именно то, что вы предлагали), но все еще та же ошибка. По-прежнему неправильно сформировано ограничение внешнего ключа - person Ralph; 30.07.2017
comment
класс YourModel расширяет модель {protected $ primaryKey = 'user_id'; public $ incrementing = false; } - person Masud Miah; 30.07.2017
comment
укажите свой столбец в качестве первичного ключа при миграции $ table- ›primary (array ('user_id')); - person Masud Miah; 30.07.2017
comment
теперь он не помещает идентификатор пользователя в таблицу. он говорит, что user_id не существует - person Ralph; 30.07.2017