web-dev-qa-db-fra.com

Comment ajouter une colonne dans un tableau en utilisant la migration laravel 5 sans perdre ses données?

J'ai une table de base de données existante et je veux y ajouter une colonne. Cependant, lorsque j'exécute le php artisan migrate commande, il ne dit rien à migrer. Mais j'ajoute déjà un schéma pour ajouter des colonnes de table. J'ai lu quelques articles et liens que je devrais exécuter php artisan migrate:refresh avant les nouvelles colonnes à ajouter. Le problème est qu'il effacera mes données existantes dans ma table. Existe-t-il un moyen de réaliser la migration et d'ajouter avec succès des colonnes dans ma table sans supprimer mes données? S'il vous plait, j'ai besoin de votre aide avec ceci. Merci beaucoup. Voici mon code de migration.

public function up()
{
    //
    Schema::create('purchase_orders', function(Blueprint $table){

        $table->increments('id');
        $table->string('po_code');
        $table->text('purchase_orders');
        $table->float('freight_charge');
        $table->float('overall_total');
        $table->timestamps();

    });

    Schema::table('purchase_orders', function(Blueprint $table){
        $table->string('shipped_via');
        $table->string('terms');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //
    Schema::drop('purchase_orders');
}

Je veux ajouter la colonne shipped_via et terms dans mon purchase_orders table.

17
Eli

Utilisez la commande ci-dessous pour modifier la table existante

php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders

utilisez --create pour créer la nouvelle table et --table pour modifier la table existante.

Maintenant, un nouveau fichier de migration sera créé. A l'intérieur de la fonction up() dans ce fichier, ajoutez ces lignes

Schema::table('purchase_orders', function(Blueprint $table){
    $table->string('shipped_via');
    $table->string('terms');
});

Et puis exécutez php artisan migrate

35
Abhishek

Laravel a une table dans votre base de données où il garde une trace de toutes les migrations qui sont déjà exécutées. Ainsi, en modifiant uniquement le fichier de migration Laravel ne réexécutera pas automatiquement cette migration pour vous. La migration est déjà exécutée par Laravel.

Donc, la meilleure chose à faire est de simplement créer une nouvelle migration et de mettre le morceau de code que vous avez déjà (vous étiez sur la bonne voie!).

public function up()
{
    //
    Schema::table('purchase_orders', function(Blueprint $table){
        $table->string('shipped_via');
        $table->string('terms');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    //

}

Vous n'avez pas besoin de remplir le cas de la fonction vers le bas, la table sera supprimée par votre migration actuelle de Purchase_orders.

Pour migrer la nouvelle migration, exécutez simplement:

php artisan migrate
4
Jirennor