Recherche…
Migrations
Pour contrôler votre base de données dans Laravel, utilisez les migrations. Créer une migration avec artisan:
php artisan make:migration create_first_table --create=first_table
Cela générera la classe CreateFirstTable. A l'intérieur de la méthode up, vous pouvez créer vos colonnes:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFirstTable extends Migration
{
public function up()
{
Schema::create('first_table', function (Blueprint $table) {
$table->increments('id');
$table->string('first_string_column_name');
$table->integer('secont_integer_column_name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('first_table');
}
}
A la fin de l'exécution de toutes vos classes de migration, vous pouvez exécuter la commande artisan:
php artisan migrate
Cela créera vos tables et vos colonnes dans votre base de données. Les autres commandes de migration utiles sont les suivantes:
-
php artisan migrate:rollback
- Annule la migration de la dernière base de données -
php artisan migrate:reset
- Restauration de toutes les migrations de bases de données -
php artisan migrate:refresh
- Réinitialise et réexécute toutes les migrations -
php artisan migrate:status
- Affiche le statut de chaque migration
Modification des tables existantes
Parfois, vous devez modifier votre structure de tableau existante, comme renaming/deleting
colonnes. Ce que vous pouvez accomplir en créant une nouvelle migration.Et Dans la méthode up
de votre migration.
//Renaming Column.
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('email', 'username');
});
}
Dans l'exemple ci-dessus, vous renommez la email column
de la users table
des users table
en username
d' username
. Alors que le code ci-dessous supprime un username
d' users
colonne de la table d' users
.
IMPROTANT: Pour modifier des colonnes, vous devez ajouter la dépendance doctrine/dbal
au fichier composer.json
du projet et exécuter la composer update
à composer update
pour refléter les modifications.
//Droping Column
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
Les fichiers de migration
Les migrations dans une application Laravel 5 sont stockées dans le répertoire database/migrations
. Leurs noms de fichiers sont conformes à un format particulier:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
Un fichier de migration doit représenter une mise à jour du schéma pour résoudre un problème particulier. Par exemple:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Les migrations de bases de données sont classées par ordre chronologique afin que Laravel sache dans quel ordre les exécuter. Laravel effectuera toujours des migrations du plus ancien au plus récent.
Générer des fichiers de migration
Créer un nouveau fichier de migration avec le nom de fichier correct chaque fois que vous devez modifier votre schéma serait une corvée. Heureusement, la commande artisan
de Laravel peut générer la migration pour vous:
php artisan make:migration add_last_logged_in_to_users_table
Vous pouvez également utiliser les drapeaux --table
et --create
avec la commande ci-dessus. Celles-ci sont facultatives et ne concernent que la commodité. Elles insèrent le code correspondant dans le fichier de migration.
php artisan make:migration add_last_logged_in_to_users_table --table=users
php artisan make:migration create_logs_table --create=logs
Vous pouvez spécifier un chemin de sortie personnalisé pour la migration générée à l'aide de l'option --path
. Le chemin est relatif au chemin de base de l'application.
php artisan make:migration --path=app/Modules/User/Migrations
Dans une migration de base de données
Chaque migration doit avoir une méthode up()
et une méthode down()
. Le but de la méthode up()
est d'effectuer les opérations requises pour placer le schéma de base de données dans son nouvel état, et l'objectif de la méthode down()
est d'inverser toutes les opérations effectuées par la méthode up()
. Il est essentiel de s'assurer que la méthode down()
inverse correctement vos opérations pour pouvoir annuler les modifications du schéma de base de données.
Un exemple de fichier de migration peut ressembler à ceci:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLastLoggedInToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dateTime('last_logged_in')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_logged_in');
});
}
}
Lors de l'exécution de cette migration, Laravel générera le code SQL suivant à exécuter sur votre base de données:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
Exécution de migrations
Une fois votre migration écrite, son exécution appliquera les opérations à votre base de données.
php artisan migrate
Si tout s'est bien passé, vous verrez une sortie similaire à la suivante:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel est assez intelligent pour savoir quand vous effectuez des migrations dans l'environnement de production. S'il détecte que vous effectuez une migration destructive (par exemple, une migration qui supprime une colonne d'une table), la commande php artisan migrate
vous demande une confirmation. Dans les environnements de livraison continue, cela peut ne pas être souhaité. Dans ce cas, utilisez l'indicateur --force
pour ignorer la confirmation:
php artisan migrate --force
Si vous ne faites qu'exécuter des migrations, vous risquez de ne pas voir la présence d'une table de migrations
dans votre base de données. Ce tableau est ce que Laravel utilise pour garder une trace des migrations déjà effectuées. Lors de l'émission de la commande de migrate
, Laravel déterminera les migrations à exécuter, puis les exécutera dans l'ordre chronologique, puis mettra à jour la table de migrations
en conséquence.
Vous ne devez jamais modifier manuellement la table des migrations
, sauf si vous savez absolument ce que vous faites. Il est très facile de laisser par inadvertance votre base de données dans un état défectueux où vos migrations échoueront.
Faire reculer les migrations
Que se passe-t-il si vous souhaitez annuler la dernière migration, à savoir une opération récente, vous pouvez utiliser la commande awesome rollback
. Mais rappelez-vous que cette commande annule uniquement la dernière migration, qui peut inclure plusieurs fichiers de migration.
php artisan migrate:rollback
Si vous êtes intéressé par la restauration de toutes vos migrations d'application, vous pouvez utiliser la commande suivante
php artisan migrate:reset
De plus, si vous êtes paresseux comme moi et que vous souhaitez annuler et migrer avec une seule commande, vous pouvez utiliser cette commande.
php artisan migrate:refresh
php artisan migrate:refresh --seed
Vous pouvez également spécifier le nombre d'étapes à effectuer avec l'option d' step
. Comme cela va annuler 1 étape.
php artisan migrate:rollback --step=1