Table des matières
Pour utiliser toutes les nouvelles migrations valides (c'est-à-dire mettre à jour la base de données locale), exécutez la commande suivante :
4. 恢复迁移
5. 重做迁移
6. 显示迁移信息
7. 编辑迁移历史
8. 自定义迁移命令
Maison développement back-end tutoriel php Supplément 27 de la série de guides officiels de Yii Framework - Utilisation de bases de données : migration de bases de données

Supplément 27 de la série de guides officiels de Yii Framework - Utilisation de bases de données : migration de bases de données

Feb 15, 2017 am 09:10 AM



Remarque : Yii ne prend en charge la fonctionnalité de migration de base de données qu'à partir de la version 1.1.6.

Comme le code source, la structure de la base de données continue de croître à mesure que nous développons et maintenons des applications basées sur la base de données. Par exemple, pendant le développement, nous pouvons souhaiter ajouter une nouvelle table ou après la mise en place de l'application ; en production, nous pouvons réaliser que nous devons ajouter un index sur une certaine colonne. Le suivi de ces modifications dans la structure de la base de données (appelées migrations) est aussi important que l'exploitation du code source. Si le code source et la base de données sont désynchronisés, le système peut être interrompu. C'est pour cette raison que le framework Yii fournit des outils de migration de bases de données afin de suivre l'historique des migrations de bases de données, d'appliquer de nouvelles migrations ou de restaurer d'anciennes migrations

Les étapes suivantes montrent comment utiliser les migrations de bases de données pendant le développement : Tim ajoute une nouvelle migration (par exemple créer une nouvelle table)
Tim soumet une nouvelle migration à l'outil de contrôle de version (par exemple SVN, GIT)
Doug met à jour et supprime une nouvelle migration de l'outil de contrôle de version
Doug applique de nouvelles migrations à la version de développement local de la base de données

Le framework Yii prend en charge la migration de base de données via l'outil de ligne de commande yiic migrate Cet outil prend en charge la création de nouvelles migrations, l'application/l'annulation/l'annulation des migrations et l'affichage des migrations. Migrations historiques et nouvelles.

Ensuite, nous décrirons comment utiliser cet outil.

Remarque : lors de la migration à l'aide de l'outil de migration en ligne de commande, il est préférable d'utiliser le yiic dans le répertoire de l'application (par exemple, cd path/to/protected) au lieu du répertoire système. Assurez-vous d'avoir le dossier protectedmigrations et. qu'il est accessible Écrit Vérifiez également si la connexion à la base de données est configurée dans protected/config/console.php.

1. Créer une migration

Si vous souhaitez créer une nouvelle migration (par exemple, créer une table d'actualités), nous pouvons exécuter la commande suivante :

yiic migrate create <name>
Copier après la connexion
Le paramètre name est obligatoire, précise une très brève description de cette migration (par exemple create_news_table). Comme nous le montrerons ci-dessous, le paramètre name fait partie du nom de la classe PHP. Et il ne peut contenir que des lettres, des chiffres et des traits de soulignement.

yiic migrate create create_news_table
Copier après la connexion
La commande ci-dessus créera un nouveau fichier nommé m101129_185401_create_news_table.php sous le chemin protected/migrations. Le fichier contient le code suivant :

class m101129_185401_create_news_table extends CDbMigration
{
    public function up(){}

    public function down()
    {
        echo "m101129_185401_create_news_table does not support migration down.\n";
        return false;
    }

    /*
    // implement safeUp/safeDown instead if transaction is needed
    public function safeUp(){}

    public function safeDown(){}
    */
}
Copier après la connexion
Notez ceci Le nom de la classe et. le nom du fichier est le même, les deux sont le modèle m_, où représente l'horodatage UTC lors de la création de la migration (au format aammjj_hhmmss) et paramètre nommé de la commande de.

La méthode up() doit contenir le code pour implémenter la migration de la base de données, tandis que la méthode down() contient le code pour restaurer les opérations dans la méthode up().

Parfois, il n'est pas possible d'implémenter les opérations dans down(). Par exemple, si une ligne du tableau est supprimée dans la méthode up(), elle ne peut pas être restaurée dans la méthode down. Dans ce cas, la migration est dite irréversible, ce qui signifie que nous ne pouvons pas revenir à l'état précédent de la base de données. Dans le code généré ci-dessus, la méthode

down() renvoie false pour indiquer que la migration est irréversible.

Info : À partir de la version 1.1.7, si la méthode up() ou down() renvoie false, toutes les migrations ci-dessous seront annulées. Dans la version 1.1.6, une exception doit être levée pour annuler la migration suivante.

Utilisons un exemple pour montrer la migration de la création d'une table d'actualités

class m101129_185401_create_news_table extends CDbMigration
{
    public function up()
    {
        $this->createTable('tbl_news', array(
            'id' => 'pk',
            'title' => 'string NOT NULL',
            'content' => 'text',
        ));
    }

    public function down()
    {
        $this->dropTable('tbl_news');
    }
}
Copier après la connexion
La classe de base CDbMigration fournit une série de méthodes pour exploiter les données et les bases de données, par exemple, CDbMigration : :createTable Une table de base de données sera créée et CDbMigration::insert insérera une ligne de données. Ces méthodes utilisent toutes la connexion à la base de données renvoyée par CDbMigration::getDbConnection(), qui est par défaut Yii::app()->db.

Info : Vous remarquerez peut-être que les méthodes de base de données fournies par CDbMigration sont très similaires à celles de CDbCommand. En effet, ils sont fondamentalement les mêmes, sauf que la méthode CDbMigration calcule le temps d'exécution et imprime quelques informations sur les paramètres de la méthode.

Vous pouvez également étendre la méthode de fonctionnement de la base de données, comme :

public function up()
{
    $sql = "CREATE TABLE IF NOT EXISTS user(
        id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
        username VARCHAR(32) NOT NULL,
        password VARCHAR(32) NOT NULL,
        email VARCHAR(32) NOT NULL
    ) ENGINE=MyISAM";
    $this->createTableBySql('user',$sql);
}
public function createTableBySql($table,$sql){
    echo " > create table $table ...";
    $time=microtime(true);
    $this->getDbConnection()->createCommand($sql)->execute();
    echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n";
}
Copier après la connexion
2 Migration des transactions

Info : La fonctionnalité de migration des transactions est prise en charge à partir de. version 1.1.7.

Dans les migrations de bases de données complexes, nous voulons souvent nous assurer que chaque migration réussit ou échoue afin que la base de données conserve sa cohérence et son intégrité. Pour atteindre cet objectif, nous pouvons utiliser des transactions de base de données.

Nous pouvons explicitement activer les transactions de base de données et attacher d'autres codes contenant des transactions liées à la base de données, par exemple :

class m101129_185401_create_news_table extends CDbMigration
{
    public function up()
    {
        $transaction=$this->getDbConnection()->beginTransaction();
        try
        {
            $this->createTable('tbl_news', array(
                'id' => 'pk',
                'title' => 'string NOT NULL',
                'content' => 'text',
            ));
            $transaction->commit();
        }catch(Exception $e){
            echo "Exception: ".$e->getMessage()."\n";
            $transaction->rollback();
            return false;
        }
    }

    // ...similar code for down()
}
Copier après la connexion
Cependant, un plus Un moyen simple d'obtenir la prise en charge des transactions consiste à implémenter la méthode safeUp() pour remplacer up() et safeDown() pour remplacer down(). Par exemple :

class m101129_185401_create_news_table extends CDbMigration
{
    public function safeUp()
    {
        $this->createTable('tbl_news', array(
            'id' => 'pk',
            'title' => 'string NOT NULL',
            'content' => 'text',
        ));
    }

    public function safeDown()
    {
        $this->dropTable('tbl_news');
    }
}
Copier après la connexion
Lorsque Yii effectue une migration, elle est effectuée. sera activé La migration de la base de données appelle ensuite safeUp() ou safeDown(). Si des erreurs se produisent dans safeUp() et safeDown(), la transaction sera annulée pour garantir que la base de données maintient la cohérence et l'intégrité.

Remarque : tous les SGBD ne prennent pas en charge les transactions. Et certaines requêtes de base de données ne peuvent pas être placées dans des transactions. Dans ce cas, vous devez plutôt implémenter up() et down(). Pour MySQL, certaines instructions SQL provoqueront des conflits.

<.>3. Utiliser les migrations

Pour utiliser toutes les nouvelles migrations valides (c'est-à-dire mettre à jour la base de données locale), exécutez la commande suivante :

yiic migrate
Copier après la connexion

这个命令会显示所有新迁移的列表. 如果你确定使用迁移, 它将会在每一个新的迁移类中运行up()方法, 一个接着一个, 按照类名中的时间戳的顺序.

在使用迁移之后, 迁移工具会在一个数据表tbl_migration中写一条记录——允许工具识别应用了哪一个迁移. 如果tbl_migration表不存在 ,工具会在配置文件中db指定的数据库中自动创建。

有时候, 我们可能指向应用一条或者几条迁移. 那么可以运行如下命令:

yiic migrate up 3
Copier après la connexion

这个命令会运行3个新的迁移. 该表value的值3将允许我们改变将要被应用的迁移的数目。

我们还可以通过如下命令迁移数据库到一个指定的版本:

yiic migrate to 101129_185401
Copier après la connexion

也就是我们使用数据库迁移名中的时间戳部分来指定我们想要迁移到的数据库的版本。如果在最后应用的数据库迁移和指定的迁移之间有多个迁移, 所有这些迁移都会被应用. 如果指定迁移已经使用过了, 所有之后应用的迁移都会恢复。

4. 恢复迁移

想要恢复最后一个或几个已应用的迁移,我们可以运行如下命令:

yiic migrate down [step]
Copier après la connexion

其中选项 step 参数指定了要恢复的迁移的数目. 默认是1, 意味着恢复最后一个应用的迁移.

正如我们之前所描述的, 不是所有的迁移都能恢复. 尝试恢复这种迁移会抛出异常并停止整个恢复进程。

5. 重做迁移

重做迁移意味着第一次恢复并且之后应用指定的迁移. 这个可以通过如下命令来实现:

yiic migrate redo [step]
Copier après la connexion

其中可选的step参数指定了重做多少个迁移 . 默认是1, 意味着重做最后一个迁移.

6. 显示迁移信息

除了应用和恢复迁移之外, 迁移工具还可以显示迁移历史和被应用的新迁移。

yiic migrate history [limit]
yiic migrate new [limit]
Copier après la connexion

其中可选的参数 limit 指定克显示的迁移的数目。如果limit没有被指定,所有的有效迁移都会被显示。

第一个命令显示已经被应用的迁移, 而第二个命令显示还没被应用的迁移。

7. 编辑迁移历史

有时候, 我们可能想要在没有应用和恢复相应迁移的时候编辑迁移历史来指定迁移版本. 这通常发生在开发一个新的迁移的时候. 我们使用下面的命令来实现这一目标.

yiic migrate mark 101129_185401
Copier après la connexion

这个命令和yiic migrate to命令非常类似, 但它仅仅只是编辑迁移历史表到指定版本而没有应用或者恢复迁移。

8. 自定义迁移命令

有多种方式来自定义迁移命令。

使用命令行选项

迁移命令需要在命令行中指定四个选项:

interactive: boolean, specifies whether to perform migrations in an interactive mode. Defaults to true, meaning the user will be prompted when performing a 
specific migration. You may set this to false should the migrations be done in a background process.

migrationPath: string, specifies the directory storing all migration class files. This must be specified in terms of a path alias, and the corresponding 
directory must exist. If not specified, it will use the migrations sub-directory under the application base path.

migrationTable: string, specifies the name of the database table for storing migration history information. It defaults to tbl_migration. The table 
structure is version varchar(255) primary key, apply_time integer.

connectionID: string, specifies the ID of the database application component. Defaults to 'db'.

templateFile: string, specifies the path of the file to be served as the code template for generating the migration classes. This must be specified in terms of a 
path alias (e.g. application.migrations.template). If not set, an internal template will be used. Inside the template, the token {ClassName} will be replaced 
with the actual migration class name.
Copier après la connexion

想要指定这些选项, 使用如下格式的迁移命令执行即可:

yiic migrate up --option1=value1 --option2=value2 ...
Copier après la connexion

例如, 如果我们想要迁移一个论坛模块,它的迁移文件都放在模块的迁移文件夹中,可以使用如下命令:

yiic migrate up --migrationPath=ext.forum.migrations
Copier après la connexion

注意在你设置布尔选项如interactive的时候,使用如下方式传入1或者0到命令行:

yiic migrate --interactive=0
Copier après la connexion

配置全局命令

命令行选项允许我们快速配置迁移命令, 但有时候我们可能想要只配置一次命令. 例如, 我们可能想要使用不同的表来保存迁移历史, 或者我们想要使用自定义的迁移模板。我们可以通过编辑控制台应用的配置文件来实现,如下所示:

return array(
    ......
    'commandMap'=>array(
        'migrate'=>array(
            'class'=>'system.cli.commands.MigrateCommand',
            'migrationPath'=>'application.migrations',
            'migrationTable'=>'tbl_migration',
            'connectionID'=>'db',
            'templateFile'=>'application.migrations.template',
        ),
        ......
    ),
    ......
);
Copier après la connexion

现在如果我们运行迁移命令,上述配置将会生效,而不需要我们每一次在命令行中都输入那么多选项信息。

以上就是Yii框架官方指南系列增补版27——使用数据库:数据库迁移的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le framework Yii en PHP Comment utiliser le framework Yii en PHP Jun 27, 2023 pm 07:00 PM

Avec le développement rapide des applications Web, le développement Web moderne est devenu une compétence importante. De nombreux frameworks et outils sont disponibles pour développer des applications web efficaces, parmi lesquels le framework Yii est très populaire. Yii est un framework PHP hautes performances basé sur des composants qui utilise les derniers modèles de conception et technologies, fournit des outils et des composants puissants et est idéal pour créer des applications Web complexes. Dans cet article, nous verrons comment utiliser le framework Yii pour créer des applications Web. Installez d'abord le framework Yii,

Middleware du framework Yii : prise en charge de plusieurs stockages de données pour les applications Middleware du framework Yii : prise en charge de plusieurs stockages de données pour les applications Jul 28, 2023 pm 12:43 PM

Middleware du framework Yii : fournir une prise en charge de plusieurs stockages de données pour les applications Introduction Le middleware (middleware) est un concept important dans le framework Yii, qui fournit une prise en charge de plusieurs stockages de données pour les applications. Le middleware agit comme un filtre, insérant du code personnalisé entre les requêtes et les réponses d'une application. Grâce au middleware, nous pouvons traiter, vérifier, filtrer les demandes, puis transmettre les résultats traités au middleware suivant ou au gestionnaire final. Le middleware du framework Yii est très simple à utiliser

Étapes pour mettre en œuvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii Étapes pour mettre en œuvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii Jul 30, 2023 am 09:22 AM

Étapes pour mettre en œuvre la mise en cache et la segmentation de pages Web à l'aide du framework Yii Introduction : Au cours du processus de développement Web, afin d'améliorer les performances et l'expérience utilisateur du site Web, il est souvent nécessaire de mettre en cache et de fragmenter la page. Le framework Yii fournit de puissantes fonctions de mise en cache et de mise en page, qui peuvent aider les développeurs à mettre en œuvre rapidement la mise en cache et la segmentation de pages Web. Cet article explique comment utiliser le framework Yii pour implémenter la mise en cache et la segmentation de pages Web. 1. Activez la mise en cache des pages Web Dans le framework Yii, la mise en cache des pages Web peut être activée via le fichier de configuration. Ouvrez le fichier de configuration principal co

Étapes pour implémenter les migrations de bases de données (Migrations) à l'aide du framework Zend Étapes pour implémenter les migrations de bases de données (Migrations) à l'aide du framework Zend Jul 28, 2023 pm 05:54 PM

Étapes pour implémenter les migrations de bases de données (Migrations) à l'aide du framework Zend Introduction : La migration de bases de données fait partie intégrante du processus de développement logiciel. Sa fonction est de faciliter la modification et le contrôle de version par l'équipe de la structure de la base de données pendant le développement. Le Zend Framework fournit un ensemble puissant d'outils de migration de bases de données qui peuvent nous aider à gérer facilement les modifications apportées à la structure de la base de données. Cet article présentera les étapes d'utilisation du framework Zend pour implémenter la migration de bases de données et joindra des exemples de code correspondants. Étape 1 : Installez Zend Framework en premier

Créer un site Web de guide de jeu en utilisant le framework Yii Créer un site Web de guide de jeu en utilisant le framework Yii Jun 21, 2023 pm 01:45 PM

Ces dernières années, avec le développement rapide de l'industrie du jeu, de plus en plus de joueurs ont commencé à rechercher des stratégies de jeu pour les aider à réussir. Par conséquent, la création d’un site Web de guides de jeu peut permettre aux joueurs d’obtenir plus facilement des guides de jeu, et en même temps, cela peut également offrir aux joueurs une meilleure expérience de jeu. Lors de la création d'un tel site Web, nous pouvons utiliser le framework Yii pour le développement. Le framework Yii est un framework de développement d'applications web basé sur le langage de programmation PHP. Il présente les caractéristiques d'une efficacité élevée, d'une sécurité et d'une forte évolutivité, et peut nous aider à créer un guide de jeu plus rapidement et plus efficacement.

Yii Framework Middleware : ajoutez des fonctionnalités de journalisation et de débogage à votre application Yii Framework Middleware : ajoutez des fonctionnalités de journalisation et de débogage à votre application Jul 28, 2023 pm 08:49 PM

Middleware du framework Yii : ajouter des fonctionnalités de journalisation et de débogage aux applications [Introduction] Lors du développement d'applications Web, nous devons généralement ajouter des fonctionnalités supplémentaires pour améliorer les performances et la stabilité de l'application. Le framework Yii fournit le concept de middleware qui nous permet d'effectuer certaines tâches supplémentaires avant et après que l'application traite la requête. Cet article explique comment utiliser la fonction middleware du framework Yii pour implémenter les fonctions de journalisation et de débogage. [Qu'est-ce qu'un middleware] Le middleware fait référence au traitement des demandes et des réponses avant et après que l'application traite la demande.

PHP et SQLite : Comment effectuer des migrations et des mises à niveau de bases de données PHP et SQLite : Comment effectuer des migrations et des mises à niveau de bases de données Jul 28, 2023 pm 08:10 PM

PHP et SQLite : Comment effectuer la migration et la mise à niveau de bases de données La migration et la mise à niveau de bases de données sont une tâche très courante lors du développement d'applications Web. Pour les développeurs utilisant PHP et SQLite, ce processus peut être plus compliqué. Cet article explique comment utiliser PHP et SQLite pour la migration et la mise à niveau de bases de données, et fournit quelques exemples de code à titre de référence. Créer une base de données SQLite Tout d'abord, nous devons créer une base de données SQLite. Utiliser la base de données SQLite est très pratique, nous

Comment utiliser des contrôleurs pour gérer les requêtes Ajax dans le framework Yii Comment utiliser des contrôleurs pour gérer les requêtes Ajax dans le framework Yii Jul 28, 2023 pm 07:37 PM

Dans le framework Yii, les contrôleurs jouent un rôle important dans le traitement des requêtes. En plus de gérer les requêtes de pages régulières, les contrôleurs peuvent également être utilisés pour gérer les requêtes Ajax. Cet article expliquera comment gérer les requêtes Ajax dans le framework Yii et fournira des exemples de code. Dans le framework Yii, le traitement des requêtes Ajax peut s'effectuer à travers les étapes suivantes : La première étape consiste à créer une classe contrôleur (Controller). Vous pouvez hériter de la classe de contrôleur de base yiiwebCo fournie par le framework Yii

See all articles