Migration de base de données
- Modifier le champ
- Supprimer le champ
- Index
- Créer un index
- Supprimer l'index
- Introduction
- La migration est comme le contrôle de version de base de données, permettant aux équipes de modifier et de partager simplement et facilement la structure des tables de base de données de l'application. La migration est généralement utilisée en conjonction avec le générateur de structure de base de données de Laravel, vous permettant de le faire. construire facilement une structure de base de données. Si vous avez déjà dû demander à un collègue d'ajouter manuellement des champs à une structure de base de données, la migration de base de données peut vous éviter cette tâche. La façade de Laravel fournit un support correspondant pour la création et l'exploitation de tables de données pour tous les systèmes de bases de données pris en charge par Laravel.
Générer des migrations
Utilisez la commande Artisan
make:migration
pour créer des migrations.make:migration
来创建迁移。php artisan make:migration create_users_table
新的迁移位于
database/migrations
目录下。每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。--table
和--create
选项可用来指定数据表的名称,或是该迁移被执行时是否将创建的新数据表。这些选项需在预生成迁移文件时填入指定的数据表:php artisan make:migration create_users_table --create=users php artisan make:migration add_votes_to_users_table --table=users
如果你想要指定生成迁移指定一个自定义输出路径,则可以在运行
make:migration
命令时添加--path
选项,给定的路径必须是相对于应用程序的基本路径。迁移结构
迁移类通常会包含 2 个方法:
up
和down
。up
方法用于添加新的数据表, 字段或者索引到数据库, 而down
方法就是up
方法的反操作,和up
里的操作相反。在这 2 个方法中都要用到 Laravel 的
Schema
构建器来创建和修改表,
若要了解Schema
生成器中的所有可用方法 ,可以查看它的文档。比如,创建flights
表的简单示例:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFlightsTable extends Migration{ /** * 运行数据库迁移 * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * 回滚数据库迁移 * * @return void */ public function down() { Schema::drop('flights'); } }
运行迁移
执行 Artisan 命令
migrate
来运行所有未完成的迁移:php artisan migrate
{注意} 如果你正在使用 Homestead 虚拟机,你应该在你的虚拟机里执行这个命令。
在生产环境强制执行迁移
一些迁移操作是具有破坏性的, 这意味着可能会导致数据丢失。 为了防止有人在生产环境中运行这些命令, 系统会在这些命令被运行之前与你进行确认。如果要强制忽略系统的提示运行命令, 则可以使用
--force
标记:php artisan migrate --force
回滚迁移
若要回滚最后一次迁移, 可以使用
rollback
命令。 此命令将回滚最后一次 “迁移” 的操作,其中可能包含多个迁移文件:php artisan migrate:rollback
你可以在
rollback
命令后面加上step
参数,来限制回滚迁移的个数。 例如,以下命令将回滚最近五次迁移:php artisan migrate:rollback --step=5
migrate:reset
php artisan migrate:reset
Les nouvelles migrations se trouvent dans le répertoiredatabase/migrations
. Chaque nom de fichier de migration comprend un horodatage pour permettre à Laravel de confirmer l'ordre des migrations. Les options--table
et--create
peuvent être utilisées pour spécifier le nom de la table de données, ou si une nouvelle table de données sera créée lors de la migration. exécuté. Ces options doivent être renseignées dans la table de données spécifiée lors de la pré-génération du fichier de migration : 🎜php artisan migrate:refresh // 刷新数据库结构并执行数据填充 php artisan migrate:refresh --seed
🎜 Si vous souhaitez spécifier un chemin de sortie personnalisé pour générer la migration, vous pouvez l'ajouter lors de l'exécution dumake:migration< /code> option
--path
de la commande, le chemin indiqué doit être relatif au chemin de base de l'application.
🎜🎜🎜Structure de migration🎜🎜Les classes de migration contiennent généralement 2 méthodes : < code> haut etbas
. La méthodeup
est utilisée pour ajouter de nouvelles tables de données, champs ou index à la base de données, et la méthodedown
est l'opération inverse de la méthodeup
. méthode, etup
est inversée. 🎜🎜Dans ces deux méthodes, le générateurSchéma
de Laravel est utilisé pour créer et modifier des tables.
Pour comprendre toutes les fonctions du générateur deSchéma
Méthodes disponibles, peut consulter sa documentation. Par exemple, un exemple simple de création d'une tableflights
: 🎜php artisan migrate:refresh --step=5
🎜🎜🎜 🎜Exécuter les migrations🎜🎜Exécutez la commande Artisanmigrate
pour exécuter toutes les migrations en cours :🎜php artisan migrate:fresh php artisan migrate:fresh --seed
🎜{Note} Si vous utilisez une machine virtuelle Homestead, vous devez l'exécuter dans votre machine virtuelle cette commande. 🎜
🎜Forcer la migration dans l'environnement de production
🎜Certaines opérations de migration sont destructrices, ce qui signifie qu'elles peuvent entraîner une perte de données. Pour empêcher quelqu'un d'exécuter ces commandes dans un environnement de production, le système vous confirmera avant l'exécution de ces commandes. Si vous souhaitez forcer l'exécution de la commande quelles que soient les invites du système, vous pouvez utiliser la balise--force
: 🎜Schema::create('users', function (Blueprint $table) { $table->increments('id'); });
🎜🎜🎜Rollback migration
🎜Pour restaurer la dernière migration, vous pouvez utiliser la commanderollback
. Cette commande annulera la dernière opération de "migration", qui peut contenir plusieurs fichiers de migration : 🎜if (Schema::hasTable('users')) { // } if (Schema::hasColumn('users', 'email')) { // }
🎜Vous pouvez ajouter le paramètrestep
après la commanderollback
pour limiter le nombre de migrations par restauration. Par exemple, la commande suivante annulera les cinq dernières migrations : 🎜Schema::connection('foo')->create('users', function (Blueprint $table) { $table->increments('id'); });
🎜migrate:reset
La commande peut annuler toutes les migrations dans l'application : 🎜Schema::rename($from, $to);
🎜🎜Utilisez une seule commande pour effectuer une restauration ou une migration
La commande
migrate:refresh
annulera non seulement toutes les migrations de la base de données, mais exécutera également la commandemigrate
par la suite. Cette commande peut reconstruire efficacement l'intégralité de la base de données :migrate:refresh
命令不仅会回滚数据库的所有迁移还会接着运行migrate
命令。 这个命令可以高效地重建整个数据库:Schema::drop('users');Schema::dropIfExists('users');
使用
refresh
命令并提供step
参数来回滚并再执行最后指定的迁移数。例如, 以下命令将回滚并重新执行最后五次迁移:Schema::table('users', function (Blueprint $table) { $table->string('email'); });
删除所有表 & 迁移
The
migrate:fresh
命令会从数据库中删除所有表,然后执行migrate
命令:Schema::table('users', function (Blueprint $table) { $table->string('email')->nullable(); });
数据表
创建数据表
可以使用
Schema
facade 的create
方法来创建新的数据库表。create
方法接受两个参数:第一个参数为数据表的名称,第二个参数是Closure
,此闭包会接收一个用于定义新数据表的Blueprint
对象:composer require doctrine/dbal
当然,在创建数据表的时候,可以使用任何数据库结构生成器的 字段方法 来定义数据表的字段。
检查数据表 / 字段是否存在
可以使用
hasTable
和hasColumn
Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->change(); });
Utilisez la commanderefresh
et fournissez le paramètrestep
pour annuler et réexécuter le dernier nombre de migrations spécifié. Par exemple, la commande suivante annulera et réexécutera les cinq dernières migrations :Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->nullable()->change(); });
🎜Supprimer toutes les tables et migrer 🎜🎜Lemigrate:fresh La commande code> supprimera toutes les tables de la base de données puis exécutera la commande
migrate
: 🎜Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });
🎜🎜🎜Tableaux de données
🎜🎜🎜Création d'une table de données
🎜Vous pouvez utiliser la méthodecreate
de la façadeSchema
pour créer une nouvelle table de base de données. La méthodecreate
accepte deux paramètres : le premier paramètre est le nom de la table de données, et le deuxième paramètre estClosure
. Cette fermeture recevra un paramètre pour définir une nouvelle donnée. table. L'objetBlueprint
: 🎜Schema::table('users', function (Blueprint $table) { $table->dropColumn('votes'); });
🎜Bien sûr, lors de la création de la table de données, vous pouvez utiliser la méthode de champ de n'importe quelle structure de base de données. générateur pour le définir Champs de la table de données. 🎜🎜🎜Vérifiez si la table/le champ de données existe🎜🎜Vous pouvez utiliser les méthodeshasTable
ethasColumn
pour vérifier les données La table ou le champ existe-t-il : 🎜Schema::table('users', function (Blueprint $table) { $table->dropColumn(['votes', 'avatar', 'location']); });
🎜🎜Options de connexion à la base de données et de table
Si vous souhaitez effectuer des opérations de structure sur une connexion à la base de données qui n'est pas la connexion par défaut, vous pouvez utiliser la méthode
connection
:$table->string('email')->unique();
connection
方法:$table->unique('email');
你可以在数据库结构生成器上使用以下命令来定义表的选项: