web-dev-qa-db-fra.com

Ajouter une nouvelle colonne à la table existante dans une migration

Je n'arrive pas à comprendre comment ajouter une nouvelle colonne à ma table de base de données existante à l'aide du cadre Laravel.

J'ai essayé de modifier le fichier de migration à l'aide de ...

<?php

public function up()
{
    Schema::create('users', function ($table) {
        $table->integer("paid");
    });
}

En terminal, j'exécute php artisan migrate:install et migrate.

Comment ajouter de nouvelles colonnes?

212
kim larsen

Pour créer une migration, vous pouvez utiliser la commande migrate: make sur la CLI Artisan. Utilisez un nom spécifique pour éviter les conflits avec les modèles existants

pour Laravel 3:

php artisan migrate:make add_paid_to_users

pour Laravel 5+:

php artisan make:migration add_paid_to_users

Vous devez ensuite utiliser la méthode Schema::table() (lorsque vous accédez à une table existante sans en créer une nouvelle). Et vous pouvez ajouter une colonne comme ceci:

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

et n'oubliez pas d'ajouter l'option de restauration:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

Ensuite, vous pouvez exécuter vos migrations:

php artisan migrate

Tout cela est bien couvert dans la documentation de Laravel 3:

Et pour Laravel 4/Laravel 5:

Modifier:

utilisez $table->integer('paid')->after('whichever_column'); pour ajouter ce champ après une colonne spécifique.

487
Phill Sparks

J'ajouterai à la réponse de mike3875 pour les futurs lecteurs utilisant Laravel 5.1 et les versions ultérieures.

Pour accélérer les choses, vous pouvez utiliser le drapeau "--table" comme ceci:

php artisan make:migration add_paid_to_users --table="users"

Ceci ajoutera automatiquement le contenu de la méthode up et down:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

De même, vous pouvez utiliser l'option --create["table_name"] lors de la création de nouvelles migrations qui ajouteront davantage de passe-partout à vos migrations. Petit point, mais utile quand on en fait plein!

57
camelCase

Si vous utilisez Laravel 5, la commande serait:

php artisan make:migration add_paid_to_users

Toutes les commandes permettant de créer des objets (contrôleurs, modèles, migrations, etc.) ont été déplacées sous la commande make:.

php artisan migrate est toujours le même.

24
mikelovelyuk

Vous pouvez ajouter de nouvelles colonnes dans la méthode initiale Schema::create comme ceci:

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

Si vous avez déjà créé une table, vous pouvez ajouter des colonnes supplémentaires à cette table en créant une nouvelle migration et en utilisant la méthode Schema::table:

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

La documentation est assez complète à ce sujet et n'a pas beaucoup changé de version à version 4 .

17
tplaner

laravel 5.6 et plus

au cas où vous voudriez ajouter une nouvelle colonne en tant que clé étrangère à une table existante.

Créez une nouvelle migration en exécutant cette commande: make: migration

Exemple:

php artisan make:migration add_store_id_to_users_table --table=users

Dans le dossier database/migrations, vous avez un nouveau fichier de migration, quelque chose comme:

2018_08_08_093431_add_store_id_to_users_table.php (voir les commentaires)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

Après cela, lancez la commande:

php artisan migrate

Si vous souhaitez annuler la dernière migration pour une raison quelconque, exécutez cette commande:

php artisan migrate:rollback

Vous pouvez trouver plus d'informations sur les migrations dans le docs

16
chebaby

vous pouvez simplement modifier votre fichier de migration existant, en ajoutant par exemple une colonne à votre table, puis en tapant dans votre terminal:

$ php artisan migrate:refresh
6
Mahana Delacour

cette chose est travaillée sur laravel 5.1.

d'abord, sur votre terminal, exécutez ce code

php artisan make:migration add_paid_to_users --table=users

après cela, allez dans le répertoire de votre projet et développez la base de données du répertoire - migration et modifiez le fichier add_paid_to_users.php, ajoutez ce code

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

après cela, retournez à votre terminal et exécutez cette commande

php artisan migrate

espérons cette aide.

4
Rosidin Bima

D'abord annuler votre migration précédente

php artisan migrate:rollback

Après cela, vous pouvez modifier votre fichier de migration existant (ajouter des colonnes, renommer ou supprimer des colonnes), puis réexécutez votre fichier de migration.

php artisan migrate
3
noobgrammer

Bien qu'un fichier de migration soit la meilleure pratique, comme d'autres l'ont déjà mentionné, vous pouvez également ajouter une colonne avec bricoleur dans un pincement.

$ php artisan tinker

Voici un exemple one-line pour le terminal:

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(Ici, il est formaté pour la lisibilité)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});
0
mfink