Ошибка Laravel при создании составного внешнего ключа

Мне нужно создать таблицу с именем «слайды», которая содержит два столбца с именами «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, поэтому кто-то может сказать мне, что не так с кодом, который выдает эту ошибку? Благодарю.

0

Решение

Я не уверен, как, если вообще, Eloquent обрабатывает составные ключи. Тем не менее, ваше сообщение об ошибке выходит из MySQL. Загадочная ошибка 150 обычно имеет отношение к плохо сформированному ограничению внешнего ключа.

Если ваш случай выше, это выглядит как work_id внешний ключ в slides не тот же тип, что и id вы пытаетесь сопоставить это с. Хотя оба столбца intс, один int(10)другой int(11), Похоже, один UNSIGNED а другой подписан.

Если вы можете поиграть со своими миграциями, чтобы оба столбца были идентичными, вы сможете решить эту конкретную проблему внешнего ключа.

1

Другие решения

Единственное, что приходит мне в голову, это может стать проблемой, это твой первичный ключ.

Вы должны попытаться изменить:

$table->primary(['id', 'work_id']);

в

$table->primary('id');

чтобы проверить, работает ли он сейчас

0