Datenbankmigrationen in PHP: Vollständiger Leitfaden zu Tools und Bibliotheken

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in PHP: Moderne Tools und Praktiken

\n\n

Datenbankmigrationen sind ein wesentlicher Bestandteil der modernen PHP-Entwicklung. Sie ermöglichen Entwicklerteams, Änderungen am Datenbankschema zu synchronisieren, den Änderungsverlauf nachzuverfolgen und diese automatisch in verschiedenen Umgebungen (lokale Umgebung, Staging, Produktion) anzuwenden. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Tools für Migrationen in PHP, deren Installation, Konfiguration und Anwendungsbeispiele.

\n\n

Was sind Migrationen und warum werden sie benötigt?

\n\n

Eine Datenbankmigration ist ein Skript, das eine Schemaänderung beschreibt: Erstellen einer Tabelle, Hinzufügen/Entfernen von Spalten, Indizes, Fremdschlüsseln. Migrationen ermöglichen:

\n
    \n
  • Versionierung von DB-Strukturänderungen zusammen mit dem Anwendungscode.
  • \n
  • Automatisierung der Bereitstellung auf neuen Servern.
  • \n
  • Rückgängigmachen von Änderungen bei Bedarf.
  • \n
  • Teamarbeit ohne Konflikte.
  • \n
\n\n

Beliebte Bibliotheken für Migrationen in PHP

\n\n

1. Phinx (robmorgan/phinx)

\n

Phinx ist eine der beliebtesten unabhängigen Bibliotheken für Migrationen. Sie ist an kein bestimmtes Framework gebunden und unterstützt MySQL, PostgreSQL, SQLite, SQL Server.

\n\n

Installation über Composer:

\n
composer require robmorgan/phinx\n
\n\n

Erstellen der Konfigurationsdatei phinx.yml:

\n
paths:\n    migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'\n    seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'\n\nenvironments:\n    default_migration_table: phinxlog\n    default_database: development\n    development:\n        adapter: mysql\n        host: localhost\n        name: myapp_db\n        user: root\n        pass: ''\n        port: 3306\n        charset: utf8\n
\n\n

Beispiel einer Migration (Erstellen der Tabelle users):

\n
<?php\n\nuse Phinx\\Migration\\AbstractMigration;\n\nclass CreateUsersTable extends AbstractMigration\n{\n    public function change()\n    {\n        $table = $this->table('users', ['id' => false, 'primary_key' => ['id']]);\n        $table->addColumn('id', 'biginteger', ['identity' => true])\n              ->addColumn('username', 'string', ['limit' => 50])\n              ->addColumn('email', 'string', ['limit' => 100])\n              ->addColumn('created_at', 'datetime')\n              ->addColumn('updated_at', 'datetime', ['null' => true])\n              ->addIndex(['email'], ['unique' => true])\n              ->create();\n    }\n}\n
\n\n

Ausführen der Migrationen:

\n
vendor/bin/phinx migrate -e development\n
\n\n

2. Doctrine Migrations (doctrine/migrations)

\n

Doctrine Migrations ist Teil des Doctrine ORM-Ökosystems. Ideal für Projekte, die bereits Doctrine verwenden. Unterstützt alle gängigen DBMS.

\n\n

Installation:

\n
composer require doctrine/migrations\n
\n\n

Konfiguration (migrations.php):

\n
<?php\nreturn [\n    'table_storage' => [\n        'table_name' => 'doctrine_migration_versions',\n    ],\n    'migrations_paths' => [\n        'App\\Migrations' => './migrations',\n    ],\n    'all_or_nothing' => true,\n    'transactional' => true,\n    'check_database_platform' => true,\n];\n
\n\n

Beispiel einer Migration:

\n
<?php\n\nnamespace App\\Migrations;\n\nuse Doctrine\\DBAL\\Schema\\Schema;\nuse Doctrine\\Migrations\\AbstractMigration;\n\nclass Version20240101000000 extends AbstractMigration\n{\n    public function up(Schema $schema): void\n    {\n        $table = $schema->createTable('products');\n        $table->addColumn('id', 'integer', ['autoincrement' => true]);\n        $table->addColumn('name', 'string', ['length' => 255]);\n        $table->addColumn('price', 'decimal', ['precision' => 10, 'scale' => 2]);\n        $table->se                    

Empfehlungen