Миграция Laravel 5, недопустимое значение по умолчанию, когда целое число

Я пытался создать таблицу с целочисленным значением 0 по умолчанию. Код выглядит так:

Schema::create('gsd_proyecto', function($table) {
        $table->increments('id');
        $table->string('nombre', 80)->unique();
        $table->string('descripcion', 250)->nullable();
        $table->date('fechaInicio')->nullable();
        $table->date('fechaFin')->nullable();
        $table->integer('estado', 1)->default(0);
        $table->string('ultimoModifico', 35)->nullable();
        $table->timestamps();
    });

Но когда я запускаю миграцию, я получаю следующую ошибку:

Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'estado' 

Я проверял, что такое SQL, созданный laravel, и нашел следующее

create table `gsd_proyecto` (
 `id` int unsigned not null auto_increment primary key, 
 `nombre` varchar(80) not null, 
 `descripcion` varchar(250) null, 
 `fechaInicio` date null, 
 `fechaFin` date null, 
 `estado` int not null default '0' auto_increment primary key,   
 `ultimoModifico` varchar(35) null, 
 `created_at` timestamp default 0 not null, 
 `updated_at` timestamp default 0 not null
)

Как видите, laravel пытается установить в поле estado символьное значение ('0'), а также в качестве первичного ключа автоинкремента.

Любая помощь будет очень признательна


person WindSaber    schedule 19.05.2015    source источник


Ответы (1)


Удалите второй параметр в методе integer. Он устанавливает столбец как автоинкремент. Проверьте API Laravel для получения дополнительной информации.

http://laravel.com/api/5.0/Illuminate/Database/Schema/Blueprint.html#method_integer

$table->integer('estado')->default(0);
person Yasen Zhelev    schedule 19.05.2015
comment
Это сработало! Большое спасибо! Я думал об определении, подобном MySql... вместо этого я сейчас использую tinyInteger, и теперь он работает. Большое спасибо! - person WindSaber; 19.05.2015