SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1075 Неверное определение таблицы; - PullRequest
0 голосов
/ 27 апреля 2019

Файл миграции

$table->increments('id');
$table->foreign('user_id')->references('id')->on('users');
$table->foreign('band_id')->references('id')->on('bands');
$table->foreign('genre_id')->references('id')->on('genres');
$table->foreign('cate_id')->references('id')->on('cates');
$table->foreign('type_id')->references('id')->on('types');
$table->integer('status');
$table->date('date');
$table->time('time');
$table->decimal('price');
$table->tinyIncrements('instrument');
$table->string('instrument_detail',255);
$table->timestamps();

После запуска php artisan migrate

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1075 Неверное определение таблицы;может быть только один автоматический столбец, и он должен быть определен как ключ (SQL: создать таблицу bookings (id int без знака, не ноль, первичный ключ auto_increment, status int, не ноль, date дата, не ноль, time время не равно нулю, price десятичное число (8, 2) не равно нулю, instrument tinyint без знака не равно первичному ключу auto_increment, instrument_detail varchar (255) не равно нулю, created_at отметка времени равно нулю, updated_at отметка времени равно нулю) набор символов по умолчанию utf8mb4 collate utf8mb4_unicode_ci)

И это ниже

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1075 Неверное определение таблицы;может быть только один автоматический столбец, и он должен быть определен как ключ

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Следующее предложение:

$table->foreign('user_id')->references('id')->on('users');

просто говорит БД о создании связи между родительским / внешним столбцами, но для этого столбец должен существовать ранее, поэтому:

$table->unsignedInteger('user_id'); // first this
$table->foreign('user_id')->references('id')->on('users'); // then this

Вы должны сделать это для каждого внешнего ключа.

Примечание:

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

0 голосов
/ 27 апреля 2019
$table->unsignedTinyInteger('instrument', true);

2-й параметр - bool для автоматического приращения, по умолчанию установлен в false

...