Inhaltsverzeichnis
1. Erstellen Sie eine Migration
2. Transaktionsmigration
3. Migrationen verwenden
4. 恢复迁移
5. 重做迁移
6. 显示迁移信息
7. 编辑迁移历史
8. 自定义迁移命令
Heim Backend-Entwicklung PHP-Tutorial Yii Framework Offizieller Leitfaden zur Serie Ergänzung 27 – Arbeiten mit Datenbanken: Datenbankmigration

Yii Framework Offizieller Leitfaden zur Serie Ergänzung 27 – Arbeiten mit Datenbanken: Datenbankmigration

Feb 15, 2017 am 09:10 AM



Hinweis: Yii unterstützt die Datenbankmigrationsfunktion erst ab Version 1.1.6.

Wie der Quellcode wächst auch die Struktur der Datenbank weiter, während wir datenbankgesteuerte Anwendungen entwickeln und pflegen. Beispielsweise möchten wir möglicherweise während der Entwicklung oder nach der Bereitstellung der Anwendung eine neue Tabelle hinzufügen In der Produktion stellen wir möglicherweise fest, dass wir einen Index für eine bestimmte Spalte hinzufügen müssen. Das Verfolgen dieser Änderungen an der Datenbankstruktur (Migrationen genannt) ist genauso wichtig wie das Betreiben des Quellcodes. Das System kann unterbrochen sein. Aus diesem Grund stellt das Yii-Framework Datenbankmigrationstools bereit, um den Datenbankmigrationsverlauf zu verfolgen, neue Migrationen anzuwenden oder alte Migrationen wiederherzustellen.

Die folgenden Schritte zeigen, wie Datenbankmigrationen während der Entwicklung verwendet werden:
Tim fügt eine neue Migration hinzu (z. B. eine neue Tabelle erstellen)
Tim übermittelt eine neue Migration an das Versionskontrolltool (z. B. SVN, GIT)
Doug aktualisiert das Versionskontrolltool und nimmt eine neue Migration heraus
Doug wendet neue Migrationen auf die lokale Entwicklungsversion der Datenbank an

Das Yii-Framework unterstützt die Datenbankmigration über das Befehlszeilentool yiic migrate. Dieses Tool unterstützt das Erstellen neuer Migrationen, das Anwenden/Rückgängigmachen/Abbrechen von Migrationen und das Anzeigen von Migrationen Historische und neue Migrationen.

Als nächstes beschreiben wir die Verwendung dieses Tools.

Hinweis: Bei der Migration mit dem Befehlszeilen-Migrationstool ist es am besten, yiic im Anwendungsverzeichnis (z. B. cd path/to/protected) anstelle des Systemverzeichnisses zu verwenden dass es zugänglich ist. Überprüfen Sie außerdem, ob die Datenbankverbindung in protected/config/console.php konfiguriert ist.

1. Erstellen Sie eine Migration

Wenn Sie eine neue Migration erstellen möchten (z. B. eine Nachrichtentabelle erstellen), können wir den folgenden Befehl ausführen:

yiic migrate create <name>
Nach dem Login kopieren

Der Parametername ist erforderlich und gibt eine sehr kurze Beschreibung dieser Migration an (z. B. create_news_table). Wie wir weiter unten zeigen werden, ist der Parameter name Teil des PHP-Klassennamens. Und es darf nur Buchstaben, Zahlen und Unterstriche enthalten.

yiic migrate create create_news_table
Nach dem Login kopieren

Der obige Befehl erstellt eine neue Datei mit dem Namen m101129_185401_create_news_table.php unter dem Pfad protected/migrations. Die Datei enthält den folgenden Code:

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(){}
    */
}
Nach dem Login kopieren

Beachten Sie dies: Den Klassennamen und Der Dateiname ist derselbe, beide sind m_, wobei den UTC-Zeitstempel darstellt, als die Migration erstellt wurde (im Format yymmdd_hhmmss), und benannter Parameter des Befehls von.

Die up()-Methode sollte den Code zum Implementieren der Datenbankmigration enthalten, während die down()-Methode Code zum Wiederherstellen der Vorgänge in der up()-Methode enthält.

Manchmal ist es nicht möglich, die Operationen in down() zu implementieren. Wenn beispielsweise eine Zeile der Tabelle in der up()-Methode gelöscht wird, kann sie in der down-Methode nicht wiederhergestellt werden. In diesem Fall wird die Migration als irreversibel bezeichnet, was bedeutet, dass wir nicht zum vorherigen Zustand der Datenbank zurückkehren können. Im oben generierten Code gibt die down()-Methode „false“ zurück, um anzuzeigen, dass die Migration irreversibel ist.

Info: Ab Version 1.1.7 werden alle unten aufgeführten Migrationen abgebrochen, wenn die Methode up() oder down() false zurückgibt. In Version 1.1.6 muss eine Ausnahme ausgelöst werden, um die folgende Migration abzubrechen.

Lassen Sie uns anhand eines Beispiels die Migration der Erstellung einer Nachrichtentabelle zeigen

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');
    }
}
Nach dem Login kopieren

Die Basisklasse CDbMigration bietet eine Reihe von Methoden zum Betreiben von Daten und Datenbanken, zum Beispiel CDbMigration: :createTable Eine Datenbanktabelle wird erstellt und CDbMigration::insert fügt eine Datenzeile ein. Diese Methoden verwenden alle die von CDbMigration::getDbConnection() zurückgegebene Datenbankverbindung, die standardmäßig Yii::app()->db ist.

Info: Möglicherweise stellen Sie fest, dass die von CDbMigration bereitgestellten Datenbankmethoden denen in CDbCommand sehr ähnlich sind. Tatsächlich sind sie grundsätzlich gleich, außer dass die CDbMigration-Methode die für die Ausführung benötigte Zeit berechnet und einige Informationen zu den Methodenparametern ausgibt.

Sie können auch die Methode zum Betreiben der Datenbank erweitern, wie zum Beispiel:

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";
}
Nach dem Login kopieren

2. Transaktionsmigration

Info: Die Funktion der Transaktionsmigration wird ab unterstützt Version 1.1.7.

Bei komplexen Datenbankmigrationen möchten wir oft sicherstellen, dass jede Migration erfolgreich ist oder fehlschlägt, damit die Datenbank Konsistenz und Integrität behält. Um dieses Ziel zu erreichen, können wir Datenbanktransaktionen nutzen.

Wir können Datenbanktransaktionen explizit aktivieren und anderen datenbankbezogenen transaktionshaltigen Code anhängen, zum Beispiel:

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()
}
Nach dem Login kopieren

Allerdings a mehr Eine einfache Möglichkeit, Transaktionsunterstützung zu erhalten, besteht darin, die Methode „safeUp()“ als Ersatz für „up()“ und „safeDown()“ als Ersatz für „down()“ zu implementieren:

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');
    }
}
Nach dem Login kopieren

Wenn Yii eine Migration durchführt, wird es wird aktiviert. Die Datenbankmigration ruft dann „safeUp()“ oder „safeDown()“ auf. Wenn in „safeUp()“ und „safeDown()“ Fehler auftreten, wird die Transaktion zurückgesetzt, um sicherzustellen, dass die Datenbank Konsistenz und Integrität beibehält.

Hinweis: Nicht alle DBMS unterstützen Transaktionen. In diesem Fall müssen Sie stattdessen up() und down() implementieren.

3. Migrationen verwenden

Um alle gültigen neuen Migrationen zu verwenden (d. h. die lokale Datenbank auf den neuesten Stand zu bringen), führen Sie den folgenden Befehl aus:

yiic migrate
Nach dem Login kopieren

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

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

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

yiic migrate up 3
Nach dem Login kopieren

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

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

yiic migrate to 101129_185401
Nach dem Login kopieren

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

4. 恢复迁移

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

yiic migrate down [step]
Nach dem Login kopieren

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

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

5. 重做迁移

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

yiic migrate redo [step]
Nach dem Login kopieren

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

6. 显示迁移信息

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

yiic migrate history [limit]
yiic migrate new [limit]
Nach dem Login kopieren

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

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

7. 编辑迁移历史

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

yiic migrate mark 101129_185401
Nach dem Login kopieren

这个命令和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.
Nach dem Login kopieren

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

yiic migrate up --option1=value1 --option2=value2 ...
Nach dem Login kopieren

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

yiic migrate up --migrationPath=ext.forum.migrations
Nach dem Login kopieren

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

yiic migrate --interactive=0
Nach dem Login kopieren

配置全局命令

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

return array(
    ......
    'commandMap'=>array(
        'migrate'=>array(
            'class'=>'system.cli.commands.MigrateCommand',
            'migrationPath'=>'application.migrations',
            'migrationTable'=>'tbl_migration',
            'connectionID'=>'db',
            'templateFile'=>'application.migrations.template',
        ),
        ......
    ),
    ......
);
Nach dem Login kopieren

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

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


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie das Yii-Framework in PHP So verwenden Sie das Yii-Framework in PHP Jun 27, 2023 pm 07:00 PM

Mit der rasanten Entwicklung von Webanwendungen ist die moderne Webentwicklung zu einer wichtigen Fähigkeit geworden. Für die Entwicklung effizienter Webanwendungen stehen viele Frameworks und Tools zur Verfügung, unter denen das Yii-Framework ein sehr beliebtes Framework ist. Yii ist ein leistungsstarkes, komponentenbasiertes PHP-Framework, das die neuesten Designmuster und Technologien nutzt, leistungsstarke Tools und Komponenten bereitstellt und sich ideal für die Erstellung komplexer Webanwendungen eignet. In diesem Artikel besprechen wir, wie Sie das Yii-Framework zum Erstellen von Webanwendungen verwenden. Installieren Sie zuerst das Yii-Framework.

Yii-Framework-Middleware: Bereitstellung mehrerer Datenspeicherunterstützung für Anwendungen Yii-Framework-Middleware: Bereitstellung mehrerer Datenspeicherunterstützung für Anwendungen Jul 28, 2023 pm 12:43 PM

Yii-Framework-Middleware: Bereitstellung mehrerer Datenspeicherunterstützung für Anwendungen Einführung Middleware (Middleware) ist ein wichtiges Konzept im Yii-Framework, das mehrere Datenspeicherunterstützung für Anwendungen bereitstellt. Middleware fungiert wie ein Filter und fügt benutzerdefinierten Code zwischen den Anforderungen und Antworten einer Anwendung ein. Mithilfe der Middleware können wir Anforderungen verarbeiten, überprüfen, filtern und die verarbeiteten Ergebnisse dann an die nächste Middleware oder den endgültigen Handler weitergeben. Middleware im Yii-Framework ist sehr einfach zu verwenden

Schritte zum Implementieren von Webseiten-Caching und Seiten-Chunking mit dem Yii-Framework Schritte zum Implementieren von Webseiten-Caching und Seiten-Chunking mit dem Yii-Framework Jul 30, 2023 am 09:22 AM

Schritte zum Implementieren von Webseiten-Caching und Seiten-Chunking mit dem Yii-Framework Einführung: Während des Webentwicklungsprozesses ist es zur Verbesserung der Leistung und Benutzererfahrung der Website häufig erforderlich, die Seite zwischenzuspeichern und zu segmentieren. Das Yii-Framework bietet leistungsstarke Caching- und Layoutfunktionen, die Entwicklern dabei helfen können, Webseiten-Caching und Seiten-Chunking schnell zu implementieren. In diesem Artikel wird erläutert, wie das Yii-Framework zum Implementieren von Webseiten-Caching und Seiten-Chunking verwendet wird. 1. Aktivieren Sie das Webseiten-Caching. Im Yii-Framework kann das Webseiten-Caching über die Konfigurationsdatei aktiviert werden. Öffnen Sie die Hauptkonfigurationsdatei co

Schritte zum Implementieren von Datenbankmigrationen (Migrationen) mithilfe des Zend-Frameworks Schritte zum Implementieren von Datenbankmigrationen (Migrationen) mithilfe des Zend-Frameworks Jul 28, 2023 pm 05:54 PM

Schritte zur Implementierung von Datenbankmigrationen (Migrationen) mithilfe des Zend-Frameworks Einführung: Die Datenbankmigration ist ein unverzichtbarer Teil des Softwareentwicklungsprozesses. Ihre Funktion besteht darin, die Änderung und Versionskontrolle der Datenbankstruktur durch das Team während der Entwicklung zu erleichtern. Das Zend Framework bietet einen leistungsstarken Satz an Datenbankmigrationstools, die uns dabei helfen können, Änderungen an der Datenbankstruktur einfach zu verwalten. In diesem Artikel werden die Schritte zur Verwendung des Zend-Frameworks zur Implementierung der Datenbankmigration vorgestellt und entsprechende Codebeispiele angehängt. Schritt 1: Installieren Sie zuerst das Zend Framework

Erstellen Sie eine Spielanleitungs-Website mit dem Yii-Framework Erstellen Sie eine Spielanleitungs-Website mit dem Yii-Framework Jun 21, 2023 pm 01:45 PM

In den letzten Jahren haben mit der rasanten Entwicklung der Spielebranche immer mehr Spieler begonnen, nach Spielstrategien zu suchen, die ihnen helfen, das Spiel zu bestehen. Daher kann die Erstellung einer Spielanleitungs-Website den Spielern den Zugang zu Spielanleitungen erleichtern und gleichzeitig den Spielern ein besseres Spielerlebnis bieten. Beim Erstellen einer solchen Website können wir das Yii-Framework für die Entwicklung verwenden. Das Yii-Framework ist ein Webanwendungsentwicklungsframework, das auf der Programmiersprache PHP basiert. Es zeichnet sich durch hohe Effizienz, Sicherheit und starke Skalierbarkeit aus und kann uns dabei helfen, einen Spielführer schneller und effizienter zu erstellen.

Yii Framework Middleware: Fügen Sie Ihrer Anwendung Protokollierungs- und Debugging-Funktionen hinzu Yii Framework Middleware: Fügen Sie Ihrer Anwendung Protokollierungs- und Debugging-Funktionen hinzu Jul 28, 2023 pm 08:49 PM

Yii-Framework-Middleware: Protokollierungs- und Debugging-Funktionen zu Anwendungen hinzufügen [Einführung] Bei der Entwicklung von Webanwendungen müssen wir normalerweise einige zusätzliche Funktionen hinzufügen, um die Leistung und Stabilität der Anwendung zu verbessern. Das Yii-Framework stellt das Konzept der Middleware bereit, das es uns ermöglicht, einige zusätzliche Aufgaben auszuführen, bevor und nachdem die Anwendung die Anfrage verarbeitet. In diesem Artikel wird erläutert, wie Sie die Middleware-Funktion des Yii-Frameworks verwenden, um Protokollierungs- und Debugging-Funktionen zu implementieren. [Was ist Middleware?] Middleware bezieht sich auf die Verarbeitung von Anfragen und Antworten vor und nach der Verarbeitung der Anfrage durch die Anwendung.

PHP und SQLite: So führen Sie Datenbankmigrationen und -aktualisierungen durch PHP und SQLite: So führen Sie Datenbankmigrationen und -aktualisierungen durch Jul 28, 2023 pm 08:10 PM

PHP und SQLite: So führen Sie eine Datenbankmigration und -aktualisierung durch. Die Datenbankmigration und -aktualisierung ist eine sehr häufige Aufgabe bei der Entwicklung von Webanwendungen. Für Entwickler, die PHP und SQLite verwenden, kann dieser Prozess komplizierter sein. In diesem Artikel wird die Verwendung von PHP und SQLite für die Datenbankmigration und -aktualisierung vorgestellt und einige Codebeispiele als Referenz bereitgestellt. Erstellen Sie eine SQLite-Datenbank. Zuerst müssen wir eine SQLite-Datenbank erstellen. Die Verwendung einer SQLite-Datenbank ist für uns sehr praktisch

So verwenden Sie Controller zur Verarbeitung von Ajax-Anfragen im Yii-Framework So verwenden Sie Controller zur Verarbeitung von Ajax-Anfragen im Yii-Framework Jul 28, 2023 pm 07:37 PM

Im Yii-Framework spielen Controller eine wichtige Rolle bei der Bearbeitung von Anfragen. Zusätzlich zur Verarbeitung regulärer Seitenanfragen können Controller auch zur Verarbeitung von Ajax-Anfragen verwendet werden. In diesem Artikel wird erläutert, wie Ajax-Anfragen im Yii-Framework verarbeitet werden, und es werden Codebeispiele bereitgestellt. Im Yii-Framework kann die Verarbeitung von Ajax-Anfragen über die folgenden Schritte erfolgen: Erstellen Sie zunächst eine Controller-Klasse (Controller). Sie können die vom Yii-Framework bereitgestellte grundlegende Controller-Klasse yiiwebCo erben

See all articles