Intereting Posts
Как проверить, является ли один символ нижним регистром в PHP? Cookie без безопасного флага и установлен флаг HttpOnly Как получить часовой пояс от кода аэропорта (IATA / FAA) Буфер дополнительной информации с буфером PHP Прямая трансляция Тема Создание / установка XDebug на Mac OSX с помощью MAMP Как открыть различную информацию для каждого созданного мною полигона? Google maps api v3 Триггер не распознает таблицу (Trigger для разбиения содержимого NEW.values ​​на несколько строк для вставки в другую таблицу) Какие преимущества имеет PHP для ASP.NET? PHP str_replace работает неправильно Получить правильный час для отметки времени UNIX подготовленный оператор внутри цикла while, сгенерированный подготовленным оператором Как создать новую запись с фотографией, прикрепленной в WordPress с помощью XMLRPC? Загрузка изображения с iOS на PHP Как проверить правильность выполнения запроса UPDATE mysqli?

Laravel Scheme Builder добавляет auto_increment ко всем целочисленным полям, которые не позволяют

Когда я пытаюсь использовать PHP Laravels Migration and schema builder, я продолжаю получать ошибку ниже на любом табуле, у которого есть столбец с индексом автоматического увеличения и обычный столбец user_id integer.

Приведенная ниже ошибка показывает, что в столбце user_id SQL генерируется значение auto_increment на user_id, и мой код не говорит, что он это делает!

Я использую Laravel v5.3

Мой код схемы:

public function up() { Schema::create('bookmark_tag_lists', function(Blueprint $table) { $table->increments('id', 10); $table->string('title', 100)->nullable(); $table->string('slug', 100)->nullable(); $table->text('description', 65535)->nullable(); $table->string('list_icon', 200)->nullable(); $table->text('tags', 65535)->nullable(); $table->integer('user_id', 10)->unsigned(); $table->dateTime('created_on'); $table->dateTime('modified_on'); $table->integer('parent')->default(0); $table->string('breadcrumb_path')->nullable(); $table->integer('tag_count')->default(0); $table->integer('bookmark_count')->default(0); $table->integer('sort')->default(0); $table->integer('active')->default(1); }); } 

ошибка базы данных

 [Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table def inition; there can be only one auto column and it must be defined as a key (SQL: create table `bookmark_tag_lists` (`id` int unsigned not null auto_in crement primary key, `title` varchar(100) null, `slug` varchar(100) null, ` description` text null, `list_icon` varchar(200) null, `tags` text null, `u ser_id` int unsigned not null auto_increment primary key, `created_on` date time not null, `modified_on` datetime not null, `parent` int not null defau lt '0', `breadcrumb_path` varchar(255) null, `tag_count` int not null defau lt '0', `bookmark_count` int not null default '0', `sort` int not null defa ult '0', `active` int not null default '1') default character set utf8 coll ate utf8_unicode_ci) [Doctrine\DBAL\Driver\PDOException] SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table def inition; there can be only one auto column and it must be defined as a key 

Привет, возможно, это решение. Давайте рассмотрим эту строку, которая определяет значение user_id.

 $table->integer('user_id', 10)->unsigned(); 

Я думаю, вы имели в виду, что вам нужно 10-байтовое целое без знака, записывающее это, но есть одна вещь о типе целочисленного поля в Laravel 5.3. Давайте рассмотрим это определение метода, оно ожидает до трех параметров, которые будут переданы в:

  public function Blueprint::integer($column, $autoIncrement = false, $unsigned = false) Illuminate\Support\Fluent Create a new integer (4-byte) column on the table. Parameters: string $column bool $autoIncrement bool $unsigned 

Таким образом, переходя в 10 php, он переводит его в логическое, и это делает его истинным, поэтому в нем говорится, что вы пытаетесь создать несколько полей автоинкремента!

Окончательно решение:

  $table->integer('user_id', false,true); 

с этим вы просите создать не поле автоинкремента, но все равно без знака, как вы пожелаете. Но он создает 4 байта беззнакового целого с ним так. Существует еще лучшее решение:

  $table->bigInteger('user_id',false,true); 

Это создает 8 баз данных без знака NOT autoInrement в базе данных.

Надеюсь, это поможет.

Я исправил добавление $table->index('user_id'); к моему строителю схемы таблиц tag_list