Получение неправильно сформированного ограничения внешнего ключа при миграции laravel - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу собрать Chatter Package для моего проекта laravel 5.8, но получаю сообщение об ошибке в этой миграции, файл пытается создать таблицу с именем базы данных, не знаю, почему, пожалуйста, попробуйте помочь

2016_07_29_171128_create_foreign_keys.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreateForeignKeys extends Migration
{
    public function up()
    {
        Schema::table('chatter_discussion', function (Blueprint $table) {
            $table->foreign('chatter_category_id')->references('id')->on('chatter_categories')
                        ->onDelete('cascade')
                        ->onUpdate('cascade');
            $table->foreign('user_id')->references('id')->on('users')
                        ->onDelete('cascade')
                        ->onUpdate('cascade');
        });
        Schema::table('chatter_post', function (Blueprint $table) {
            $table->foreign('chatter_discussion_id')->references('id')->on('chatter_discussion')
                        ->onDelete('cascade')
                        ->onUpdate('cascade');
            $table->foreign('user_id')->references('id')->on('users')
                        ->onDelete('cascade')
                        ->onUpdate('cascade');
        });
    }

    public function down()
    {
        Schema::table('chatter_discussion', function (Blueprint $table) {

            $table->dropForeign('chatter_discussion_chatter_category_id_foreign');
            $table->dropForeign('chatter_discussion_user_id_foreign');
        });
        Schema::table('chatter_post', function (Blueprint $table) {
            $table->dropForeign('chatter_post_chatter_discussion_id_foreign');
            $table->dropForeign('chatter_post_user_id_foreign');
        });
    }
}

Это ОШИБКА, которую я получаю enter image description here

Ответы [ 4 ]

0 голосов
/ 16 апреля 2019

Измените версии Laravel, и это будет работать наверняка, есть проблема с laravel 5.8

, попробуйте вот так

 Schema::table('posts', function (Blueprint $table) {
      $table->unsignedBigInteger('user_id');
      $table->foreign('user_id')->references('id')->on('users');
     });
0 голосов
/ 16 апреля 2019

Эта ошибка возникает из-за того, что foreign_key имеет другой тип данных с целевой таблицей.

По умолчанию Laravel использует increments() по умолчанию id таблицы. Он создает столбец с именем id с типом данных unsigned integer.

Вам нужно определить столбец с unsigned integer, чтобы иметь возможность создать ограничение.

Согласно Документам Laravel , вам нужно сделать что-то вроде этого

...

// Create a column with unsigned integer as type
$table->unsignedInteger('chatter_category_id');

// Then you can assign it properly
$table->foreign('chatter_category_id')
      ->references('id')
      ->on('chatter_categories')
      ->onDelete('cascade')
      ->onUpdate('cascade');

....
0 голосов
/ 16 апреля 2019

, если использовать laravel 5.8, поле по умолчанию для идентификатора: bigIncrements .

, например:

$table->bigIncrements('id');

, и вы должны использовать unsignedBigInteger введите поле внешнего ключа.

вот так:

$table->unsignedBigInteger('chatter_category_id');

удачи.

0 голосов
/ 16 апреля 2019

Внешний ключ должен быть отформатирован в точности так, как тот ключ, на который он ссылается.

id обычно int и unsigned.

, поэтому я предлагаю вам создать столбец user_id как:

$table->integer('user_id')->unsigned();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...