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

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

$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: create table bookings (id int unsigned not null auto_increment primary key, status int not null, date date not null, time time not null, price decimal (8 , 2) не null, instrument tinyint unsigned not null первичный ключ auto_increment, instrument_detail varchar (255) not null, created_at timestamp null, updated_at timestamp null) набор символов по умолчанию utf8mb4 сопоставление utf8mb4_unicode_ci)

И это ниже

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


person chojon    schedule 27.04.2019    source источник


Ответы (2)


$table->unsignedTinyInteger('instrument', true);

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

person Ahmed Aboud    schedule 27.04.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 не нуждается в том, чтобы вы определяли эти ссылки, потому что он не использует их, только для согласованности базы данных.

person Kenny Horna    schedule 27.04.2019
comment
спасибо HCK :( но все равно не работает, миграция не получается, говорят SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1075 тем же способом - person chojon; 27.04.2019
comment
@chojon проверьте решение Ахмеда. - person Kenny Horna; 27.04.2019
comment
поэтому я пробую, но не сработало все, что я хочу знать, почему они все еще не могут запустить миграцию, тогда я найду такой же случай, эта проблема, спасибо, пау - person chojon; 27.04.2019