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?
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.
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!
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.
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 .
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
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
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.
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
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');
});