2017-08-07 2 views
0

J'ai quelques tables où j'ai besoin de tinyint champs qui doivent être unsigned et mis à auto_increment.Laravel 5.3: Auto incrémentation non signée TINYINT

Le L5.3 Database : Migrations documentationne pas ont une méthode pour définir unsigned auto-incrementing tinyint.

J'ai essayé de l'implémenter en utilisant le DB::update(). Mon fichier de migration pour la table ressemble à:

public function up() 
{ 
    Schema::create('table_name', function (Blueprint $table) 
    { 
     $table->unsignedTinyInteger('field1'); 
     $table->string('field2', 255); 
     $table->primary('field1'); 
     $table->index('field2'); 

     $field = "field1"; 
    }); 

    $this->addAutoIncrements($field);  

} 

public function addAutoIncrements($field) 
{ 
    DB::update('ALTER TABLE table_name MODIFY $field TINYINT UNSIGNED NOT NULL AUTO_INCREMENT'); 
} 

Lorsque je tente php artisan migrate avec un tel fichier de migration, il émigre sans aucune erreur, mais n'assignantauto-increment.

Comment résoudre ce problème? Devrais-je faire la mise à jour en tant que nouvelle migration complète? Est-ce que quelqu'un l'a déjà fait?

+0

'$ table-> unsignedTinyInteger ('field1') -> increments();' – Ali

+0

@Ali: C'est ce que j'ai essayé en premier. N'a pas fonctionné. –

Répondre

2

Le deuxième paramètre de la méthode unsignedTinyInteger() est un booléen à signaler s'il s'agit d'un champ auto-incrémenté. La valeur par défaut est false, il vous suffit donc de mettre à jour votre migration pour passer en true.

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

En tant que future note, la méthode pratique tinyIncrements() a été ajouté à Laravel 5.4.16 pour faire exactement cela.

+0

Doit prendre le '$ table-> primary ('field1')' comme le 'unsignedTinyInteger ('field1', true)' prend soin d'elle. –