#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();
});
}