Laravel Миграция БД-отношений кажется правильной. сообщение об ошибке говорит, что внешние ключи несовместимы - PullRequest
0 голосов
/ 04 апреля 2020

Я наткнулся на следующую ошибку. но мои настройки миграции кажутся правильными. Когда я использовал laravel 6,8. Миграция прошла успешно.

Я использую MySQL и Laravel 7,3.

  SQLSTATE[HY000]: General error: 3780 Referencing column 'user_id' and referenced column 'id' in foreign key constraint 'cheeses_user_id_foreign' are incompatible. (SQL: alter table `cheeses` add constraint `cheeses_user_id_foreign` foreign key (`user_id`) references `users` (`id`))
  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:670

    669|         catch (Exception $e) {
  > 670|             throw new QueryException(
    671|                 $query, $this->prepareBindings($bindings), $e
    672|             );
    673|         }
class CreateUsersTable extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name')->unique();
            $table->string('email')->unique();
            $table->bigInteger('adress');
            $table->string('adress_detail');
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });
    }
class CreateCheesesTable extends Migration
{
    public function up()
    {
        Schema::create('cheeses', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users');
            $table->timestamps();
        });
    }

Ответы [ 2 ]

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

Просто скопируйте и вставьте эту функцию вместо вашей функции увеличения. Это будет работать как шарм!

public function up()
{
    Schema::create('cheeses', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });
}
0 голосов
/ 04 апреля 2020

Ваша проблема, вероятно, связана с тем, что user_id из вашей таблицы cheeses является BIGINT, а id из вашей таблицы users является НЕПИСАННЫМ BIGINT

Вы должны заменить $table->bigInteger('user_id'); с $table->unsignedBigInteger('user_id');

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