Laravel 6. Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа - PullRequest
2 голосов
/ 09 января 2020

Я запускаю сообщение об ошибке ниже после определения моего механизма таблицы базы данных для innoDB . Я попробовал все там, но это не работает. Как вы можете сказать, я использую bigInteger и unsignedBigInteger для своего типа столбца.

Ошибка

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table users add constraint users_account_status_id_foreign foreign key ( account_status_id ) references статусы ( id ) on delete set null on update cascade)

 ************  USERS TABLE ***************************
 Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('email')->unique();
        $table->string('phone')->nullable();
        $table->string('user_code')->unique();
        $table->integer('online_status')->boolean()->default(0);
        $table->unsignedBigInteger('account_status_id')->default(0);
        $table->string('image')->nullable();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
        $table->softDeletes();

        $table->foreign('account_status_id')->references('id')->on('statuses')->onUpdate('cascade')->onDelete('set null');
    });


*********STATUSES TABLE *******************
  Schema::create('statuses', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name')->unique();
        $table->string('slug')->unique();
        $table->timestamps();
        // $table->engine = 'InnoDB';
    });

******* CONFIG/database.php ****************
'mysql' => [
        'driver' => 'mysql',
        ...
        'engine' => 'innoDB',
        ...
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

Ответы [ 2 ]

1 голос
/ 09 января 2020

Похоже, вы не правильно определили фактическое поле внешнего ключа в таблице Users , возможно. До обозначения foreign я ожидал бы увидеть что-то вроде:

$table->unsignedBigInteger('account_status_id');  // No default 0
$table->foreign('account_status_id')->references('id')->on('statuses')->onUpdate('cascade')->onDelete('set null');

Обратите внимание на потерю ->default(0), так как это создаст проблемы с полем Nullable.

Документы для миграции здесь для V6 .

0 голосов
/ 09 января 2020

Я думаю, что вашему Schema Builder не удалось создать ограничение внешнего ключа, потому что таблица STATUSES еще не создана.

Попробуйте отменить заказы на миграцию (измените даты, которые составляют первую часть имен файлов миграции, чтобы они в нужном вам порядке (например, для 2020_01_09_134109_create_users_table. php, дата и время 2020-01-29, 13:41:09)

Запустите миграцию еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...