2016-12-27 10 views
3

Я изучал Laravel в течение некоторого времени, я создаю для себя базовый проект, но сегодня я пытался перенести таблицу с целыми числами. Но он все равно принимает ошибку.Laravel 5.1 ошибка миграции auto increment primary

Каждое целое попробует быть auto_increment и primary, это может быть проблема, но я не знаю, как ее решить.

 Schema::create ('users', function (Blueprint $table) 
    { 
     $table->increments ('id'); 
     $table->string ('email')->unique(); 
     $table->string ('pass',250); 
     $table->integer ('tickets',4); 
     $table->integer ('tokens',4); 
     $table->integer ('in_raffle',4); 
     $table->text ('profile',500); 
     $table->string ('ip',20); 
     $table->integer ('ban',1); 
     $table->integer ('notice',1); 
     $table->timestamp ('last_login'); 

    }); 

https://s28.postimg.org/fh3uaqdct/screen2.jpg

Может кто-нибудь сказать мне, как я могу решить эту проблему? Что нужно редактировать, чтобы правильно работать?

Большое спасибо, приятный день!

ответ

3

Удалить параметр секунд во всех integer():

$table->integer('tickets'); 
$table->integer('tokens'); 
$table->integer('in_raffle'); 
$table->integer('ban'); 
$table->integer('notice'); 

Дело в том, secont параметр для integer() метода является autoIncrement и он рассматривается как логическое значение. Когда вы передаете что-то отличное от false, Laravel думает, что вы хотите, чтобы это целое число было auto_increment.

+0

Спасибо, это работает! Не могли бы вы рассказать мне, как я могу добавить размер целого числа? Поскольку все целые числа теперь установлены на int (11), можно добавить размер в миграцию? Если да, то как? Спасибо! – Mario

+0

Нет, к сожалению, это невозможно сделать при миграции. Имейте в виду, что размер int не имеет ничего общего с минимальным или максимальным значением и действительно полезен, если вы используете 'zerofill'. Вот хорошая рецензия. https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean – user3158900

+0

Вы не можете. Что вы можете сделать, так это использовать [эти типы integer] (https://laravel.com/docs/5.3/migrations#creating-columns): 'tinyInteger',' smallInteger', 'mediumInteger',' integer', ' bigInteger' –

1

Декларация функции выглядит следующим образом:

public function integer($column, $autoIncrement = false, $unsigned = false) 

Оставляйте от длины целого, и он будет работать нормально. Если вам нужно меньшее целое, чем длина 11, вы можете использовать smallInteger или mediumInteger, которые имеют длины, описанные here.

0

мая

$table->tinyInteger('tickets'); 
$table->tinyInteger('tokens'); 
$table->tinyInteger('in_raffle'); 
$table->boolean('ban')->default(false); 
$table->boolean('notice')->default(false);