Мне нужно создать таблицу с именем «слайды», которая содержит два столбца с именами «id» и «work_id». Идентификатор не является целым числом AUTO_INCREMENT, потому что мне нужно сохранить числа в качестве индекса в слайд-шоу.
Это ошибка, которая отображается при запуске php artisan migrate:
И это мой код:
Schema::create('slides', function(Blueprint $table) {
$table->integer('id');
$table->integer('work_id');
$table->primary(['id', 'work_id']);
$table->foreign('work_id')->references('id')->on('works');
});
Это структура моей таблицы работ:
И это структура таблицы «слайдов», которая генерируется несмотря на возникающую ошибку:
Я не понимаю сообщение об ошибке, потому что я не очень хорошо владею SQL, поэтому кто-то может сказать мне, что не так с кодом, который выдает эту ошибку? Благодарю.
Я не уверен, как, если вообще, Eloquent обрабатывает составные ключи. Тем не менее, ваше сообщение об ошибке выходит из MySQL. Загадочная ошибка 150 обычно имеет отношение к плохо сформированному ограничению внешнего ключа.
Если ваш случай выше, это выглядит как work_id
внешний ключ в slides
не тот же тип, что и id
вы пытаетесь сопоставить это с. Хотя оба столбца int
с, один int(10)
другой int(11)
, Похоже, один UNSIGNED
а другой подписан.
Если вы можете поиграть со своими миграциями, чтобы оба столбца были идентичными, вы сможете решить эту конкретную проблему внешнего ключа.
Единственное, что приходит мне в голову, это может стать проблемой, это твой первичный ключ.
Вы должны попытаться изменить:
$table->primary(['id', 'work_id']);
в
$table->primary('id');
чтобы проверить, работает ли он сейчас