web-dev-qa-db-fra.com

Ajouter une colonne de table sql avant ou après une autre colonne spécifique - par migrations dans Laravel 4.1

Tableau "utilisateurs":

|id|name|address|post_code|deleted_at|created_at|

et je veux ajouter la colonne 'phone_nr' quelque part entre 'id' et 'supprimé_at'

Est-ce possible par des migrations dans Laravel 4.1?

35
Lajdák Marek

Oui. Créez une nouvelle migration à l'aide de php artisan migrate:make update_users_table.

Utilisez ensuite la commande table comme suit (si vous utilisez MySQL!):

Schema::table('users', function($table)
{
    $table->string('phone_nr')->after('id');
});

Une fois la migration terminée, enregistrez-la et exécutez-la à l'aide de php artisan migrate et votre table sera mise à jour.

Documentation: https://laravel.com/docs/4.2/migrations#column-modifiers

111
James Binford

La réponse de James est toujours correcte. Cependant, Laravel 5 a légèrement modifié la syntaxe de la migration de création:

php artisan make:migration add_google_auth_to_users_table --table=users

(Je sais que cette question est étiquetée Laravel 4, mais elle se classe assez bien pour la question;))

11
Nick

Pour quiconque s'interroge sur la requête de @ rahulsingh sur l'ajout de plusieurs colonnes consécutives après une seule colonne spécifique:

$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('what');

Vous pouvez le faire simplement en écrivant les nouveaux champs dans l'ordre inverse, par exemple:

$table->integer('col4')->after('ref_col');
$table->integer('col3')->after('ref_col');
$table->integer('col2')->after('ref_col');
$table->integer('col1')->after('ref_col');

Lorsque vous exécutez cette migration, vous constaterez que vos nouveaux champs col, col2, ... sont dans votre ordre après le champ de référence ref_col.

Malheureusement, il n'y a pas de fonction before() pour ajouter des champs avant un champ existant. (Si cela existait, nous pourrions conserver les déclarations ci-dessus dans leur ordre réel.)


Vous ne pouvez pas enchaîner avec des champs qui n'existent pas encore, par exemple:

$table->integer('col1')->after('ref_col');
$table->integer('col2')->after('col1');
$table->integer('col3')->after('col2');
$table->integer('col4')->after('col3');

Cela est dû au fait que le plan de migration est compilé en une seule requête ainsi exécutée comme une seule, donc quand il s'agit d'ajouter col2 Votre moteur de base de données se plaindra que col1 N'existe pas.

0
Adambean

J'ai créé la migration suivante:

php artisan make: migration update_nvm_table

2019_07_10_130441_update_nvm_table.php

Et à l'intérieur:

public function up()
    {
        Schema::table('nvm', function (Blueprint $table) {
            $table->renameColumn('data1', 'call_owner');
            $table->renameColumn('data2', 'transfer_type');
            $table->string('transfer_data', 50)->nullable();
        });
    }

 public function down()
    {
        Schema::table('nvm', function (Blueprint $table) {
            $table->dropColumn('transfer_data');
            $table->renameColumn('call_owner', 'data1');
            $table->renameColumn('transfer_type', 'data2');
        });
    }

J'espère que cela peut une référence pour vous! :RÉ

0
Mexidense