Не могу создать внешний ключ в бд

133
22 апреля 2021, 10:20

Помогите, пожалуйста)Вроде нет проблем, поля одинаковые, но не хочет связывать. Последовательность правильная. Сначала создаётся users после неё сразу же mems.

Ошибка:

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `mems` add constraint `mems_user_id_foreign` foreign key (`user_id`) references `users` (`user_id`))
PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
  /Applications/MAMP/htdocs/moderation/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458
PDOStatement::execute()
  /Applications/MAMP/htdocs/moderation/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458

Вот миграция users:

 Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->nullable();
        $table->string('avatar');
        $table->string('password')->nullable();
        $table->integer('user_id');
        $table->integer('access_moderation')->nullable();
        $table->integer('access_mems')->nullable();
        $table->integer('access_admin')->nullable();
        $table->rememberToken();
        $table->timestamp('updated_at')->nullable();
        $table->timestamp('created_at')->nullable();
    });

Вот миграция mems

 Schema::create('mems', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('img');
        $table->integer('author_id');
        $table->foreign('author_id')->references('user_id')->on('users');
    });

PS. Поле user_id нужно для привязки авторизованного пользователя(вк)

Answer 1

По факту поля id и user_id должны быть уникальны в пределах таблицы и привычнее было бы привязываться именно к id.

... но мне нужно именно Integer

Связываемые поля должны быть проиндексированы и иметь один тип и длину. В примере ниже использован уникальный индекс для поля user_id в родительской таблице:

Schema::create('users', function (Blueprint $table) {
  $table->bigIncrements('id');
  // ... остальные поля.
  $table->integer('user_id')->unique();
});
Schema::create('mems', function (Blueprint $table) {
  $table->bigIncrements('id');
  // ... остальные поля.
  $table->integer('author_id');
  $table->foreign('author_id')->references('user_id')->on('users');
});

Выполните в командной строке php artisan migrate:fresh.

Эта команда удалит все таблицы из Базы Данных и выполнит команду migrate.

Больше информации по вашей ошибке MySQL Error Code 1215: "Cannot add foreign key constraint".

READ ALSO
ERROR 1728 (HY000): Cannot load from mysql.user. The table is probably corrupted

ERROR 1728 (HY000): Cannot load from mysql.user. The table is probably corrupted

Ошибка при создании пользователя

213
В чём ошибка в реализации обработчика AJAX-запроса

В чём ошибка в реализации обработчика AJAX-запроса

Задача такая - с помощью jax-запроса передать данные на обработчик, который с полученными данными в качестве аргументов вызовет функцию

122
Вопрос про FILTER_SANITIZE_EMAIL

Вопрос про FILTER_SANITIZE_EMAIL

Скажите, почему FILTER_SANITIZE_EMAIL не приводит следующий email в вид: mail@mailcom?

155