Я новичок в Laravel и использую Laravel 6. Я пытаюсь создать уникальный составной индекс для двух столбцов моей таблицы MySQL, но когда я запускаю миграцию, я получаю эту ошибку:
Подсветка \ База данных \ QueryException: SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1071 Указанный ключ слишком длинный; максимальная длина ключа составляет 767 байт (SQL: изменить таблицу sleep_diary_entries
добавить индекс primaryKey
(client
, sleep_date
))
В документах сказано, что я правильно написал утверждение. Вот соответствующие строки определения таблицы:
Schema::create('sleep_diary_entries', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('client');
$table->date('sleep_date');
$table->index(['client', 'sleep_date'], 'primaryKey'); //combination of client and sleep_date must be unique
MySQL определяет строку как VARCHAR (255), а дата должна быть около 10 символов, "дай" или "возьми". Я не понимаю, как этот составной индекс может быть более 767 символов.
Этот индекс жизненно важен для правильной работы моего приложения: комбинация идентификатора пользователя и даты в индексе гарантирует, что пользователь может создавать только одну запись для каждого дня.
Как мне уговорить Laravel принять мой индекс?
Кроме того, в документах не совсем ясно, может ли составной индекс быть уникальным или
table-> unique (['client', 'sleep_date']);
допустимо или если unique () может быть применено только к одному столбцу. Мне нужно, чтобы мой составной индекс был уникальным.
РЕДАКТИРОВАТЬ: Как только я добавил строку, предложенную Sehdev для AppServiceProvider. php, я смог успешно создать свой индекс, как показано в моем вопросе. Однако методом проб и ошибок я быстро убедился, что индекс НЕ уникален и позволил бы данному пользователю добавлять несколько записей для каждой даты в соответствии с потребностями моего приложения. Я изменил определение на:
table-> unique (['client', 'sleep_date'], 'UniqueKey');
На этот раз индекс был одновременно составным и уникальным, как я и хотел.
Я все еще озадачен тем, что эти два столбца имеют общую длину более 757 байт, но у меня нет времени на это зацикливаться; Я хочу работать над моим приложением.