Проблема с внешним ключом миграции Laravel 5.8?

#foreign-keys #database-migration #laravel-5.8

#внешние ключи #база данных-миграция #laravel-5.8

Вопрос:

У меня есть 2 таблицы. мой код хорошо работает на laravel 5.7, но когда я использую laravel. Я всегда получаю ошибку, подобную этой. кто-нибудь может мне помочь?

 Schema::create('tb_satuan', function (Blueprint $table) {
        $table->bigIncrements('id_satuan');
        $table->string('nama_satuan',40);
        $table->timestamps();
    });

    Schema::create('tb_user', function (Blueprint $table) {
        $table->bigIncrements('id_user');
        $table->BigInteger('id_satuan')->unsigned();
        $table->string('username',20);
        $table->string('email',30);
        $table->text('password');
        $table->timestamps();

        $table->foreign('id_satuan')->reference('id_satuan')->on('tb_satuan');
    });
  

Это ошибка:

Исключение Illuminate Database QueryException: SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса, который следует использовать рядом с ‘)’ в строке 1 (SQL: alter table, tb_user добавляющие ссылки tb_user_id_satuan_foreign на ограничение id_satuan внешнего ключа ( tb_satuan ) ()).

Ответ №1:

Это ССЫЛОЧНЫЕЫ, а не ССЫЛОЧНЫЕ

 $table->foreign('id_satuan')->references('id_satuan')->on('tb_satuan');
  

Ответ №2:

  public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
            $table->string('title');
            $table->string('slug')->unique();
            $table->string('image')->default('default.png');
            $table->text('body');
            $table->integer('amount');
            $table->integer('room');
            $table->boolean('status')->default(false);
            $table->foreign('user_id')
                ->references('id')->on('users')
                ->onDelete('cascade');
            $table->timestamps();
        });
    }