Laravel UUID как первичный ключ и ID как внешний ключ - PullRequest
0 голосов
/ 28 мая 2020

Я определил uuid как первичный ключ и хотел бы использовать id (автоинкремент) в качестве внешнего ключа для определения отношений.

И сообщения, и комментарии имеют в своей миграции:

$table->uuid('uuid')->primary();
$table->bigInteger('id');

Их модели имеют:

protected $primaryKey = 'uuid';
protected $keyType = 'string';
public $incrementing = false;

А в миграции комментариев

$table->bigInteger('post_id')->unsigned();
$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');

Но если я запустил миграцию, я получаю General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_post_id_foreign` foreign key (`post_id`) references `posts` (`id`) on delete cascade), из которых я ' м не уверен, почему это происходит? Перед добавлением UUID logi c он работал нормально, поэтому я уверен, что допустил ошибку, но я не уверен, что это за ошибка c.

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Попробуйте.

$table->foreignId('post_id')->constrained('posts')->onDelete('cascade');
0 голосов
/ 28 мая 2020

Для добавления внешнего ключа требуется, чтобы ссылочный ключ и внешний ключ имели одинаковый тип и знак. Согласно вашим миграциям, как posts.id, так и comments.id являются подписанными bigint, но вы пытаетесь добавить внешний ключ к un signed bigint.

В ваших миграциях для posts и comments, замените

$table->bigInteger('id');

на

$table->bigInteger('id')->unsigned();

и перенесите их снова.

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