web-dev-qa-db-fra.com

Comment renommer la colonne en laravel en utilisant la migration?)

J'ai des colonnes comme mentionné ci-dessous:

public function up()
{
    Schema::create('stnk', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('no_reg', 50)->unique();
        $table->string('no_bpkb', 50)->unique();
        $table->string('nama_pemilik', 100);
        $table->string('alamat');
        $table->string('merk', 50);
        $table->string('tipe', 50);
        $table->string('jenis', 50);
        $table->smallInteger('tahun_pembuatan');
        $table->smallInteger('tahun_registrasi');
        $table->smallInteger('isi_silinder');
        $table->string('no_rangka', 50);
        $table->string('no_mesin', 50);
        $table->string('warna', 50);
        $table->string('bahan_bakar', 50);
        $table->string('warna_tnkb', 50);
        $table->string('kode_lokasi', 50);
        $table->date('berlaku_sampai');
        $table->timestamps();

        $table->index('created_at');
        $table->index('updated_at');
    });

}

J'ai fait le semoir à la table stnk

Maintenant, je veux renommer id en id_stnk.
J'ai ajouté un "doctrine/dbal" dans le "compositeur" et faire un composer update.

J'ai fait la migration php artisan migration:make rename_column.
Puis j'ai ajouté une nouvelle méthode pour renommer_colonne:

Schema::table('stnk', function(Blueprint $table)
{
    $table->renameColumn('id', 'id_stnk');

});

Et puis j'ai essayé de lancer la commande php artisan migrate mais j'ai eu l'erreur mentionnée ci-dessous:

[Ulluminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150) (SQL: ALTER TABLE stnk CHANGE id id_stnk INT UNSIGENED AUTO_INCREMENT NOT NULL)

[PDOException]
SQLSTATE[HY000]: General error: 1025  Error on rename  of './my_database/#sql -447_33' to './my_database/stnk' (error: 150)
57
Ariasa

Vous devez créer un autre fichier de migration - et le placer dans celui-ci:

Courir

Laravel 4:    php artisan migrate:make rename_stnk_column
Laravel 5:    php artisan make:migration rename_stnk_column

Puis à l'intérieur du nouvel emplacement du fichier de migration:

class RenameStnkColumn extends Migration
{

    public function up()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id', 'id_stnk');
        });
    }


    public function down()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id_stnk', 'id');
        });
    }

}
81
Laurence

la première chose à faire est de créer votre fichier de migration.

Tapez dans votre ligne de commande

php artisan make:migration rename_stk_column --table="YOUR TABLE" --create

Après avoir créé le fichier. Ouvrez le nouveau fichier de migration créé dans votre dossier d'applications sous la base de données/migrations.

Dans votre méthode up, insérez ceci:

Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id', 'id_stnk');
    });
}

et dans votre méthode down:

    Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id_stnk', 'id);
    });
}

puis dans votre ligne de commande tapez simplement

php artisan migrate

Alors wollah! vous venez de renommer id en id_stnk. BTW vous pouvez utiliser

php artisan migrate:rollback

annuler les modifications. Bonne chance

18
webartisan

Renommer des colonnes (Laravel 5.x)

Pour renommer une colonne, vous pouvez utiliser la méthode renameColumn dans le générateur de schéma. * Avant de renommer une colonne, veillez à bien ajouter doctrine/dbal dépendance à votre fichier composer.json. *

Ou vous pouvez simplement demander le package à l'aide de composer ...

composer require doctrine/dbal

Source: https://laravel.com/docs/5.0/schema#renaming-columns

Remarque: Utilisez make: migration et non migrate: make pour Laravel 5.x

11
bmatovu

Jeter mon 0,02 $ ici puisque aucune des réponses ne marchait, mais m’envoya sur la bonne voie. Ce qui s’est passé, c’est qu’une contrainte étrangère antérieure lançait l’erreur. Évident quand on y pense.

Ainsi, dans la méthode up de votre nouvelle migration, commencez par supprimer la contrainte d'origine, renommez la colonne, puis ajoutez-la à nouveau avec le nouveau nom de colonne. Dans la méthode down, vous faites exactement le contraire pour revenir au paramètre vendu.

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['server_id']);

        // Rename
        $table->renameColumn('server_id', 'linux_server_id');

        // Add it
        $table->foreign('linux_server_id')->references('id')->on('linux_servers');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['linux_server_id']);

        // Rename
        $table->renameColumn('linux_server_id', 'server_id');

        // Add it
        $table->foreign('server_id')->references('id')->on('linux_servers');
    });
}

J'espère que cela fera gagner un peu de temps à quelqu'un!

7
Stan Smulders

Suivez ces étapes, respectivement pour renommer le fichier de migration de colonne.

1 - Existe-t-il une bibliothèque Doctrine/dbal dans votre projet? Si vous n'avez pas exécuté la commande en premier

composer require doctrine/dbal

2 - crée un fichier de migration de mise à jour pour mettre à jour l'ancien fichier de migration. Attention (besoin d'avoir le même nom)

php artisan make:migrate update_oldFileName_table

par exemple, mon ancien nom de fichier de migration: create_users_table nom de fichier de mise à jour doit: update_users_table

3 - update_oldNameFile_table.php

Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});

'de' mon ancien nom de colonne et 'à' mon nouveau nom de colonne

4 - Enfin, lancez la commande migrate

php artisan migrate

Lien source: document laravel

7
melih sahin

La réponse ci-dessus est excellente ou si cela ne vous fait pas mal, annulez simplement la migration, changez le nom et exécutez à nouveau la migration.

 php artisan migrate:rollback
1
jay temp