Datenbankmigrationen in PHP: Moderne Tools und Praktiken
\n\nDatenbankmigrationen 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\nWas sind Migrationen und warum werden sie benötigt?
\n\nEine 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
Beliebte Bibliotheken für Migrationen in PHP
\n\n1. Phinx (robmorgan/phinx)
\nPhinx 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\nInstallation über Composer:
\ncomposer require robmorgan/phinx\n\n\nErstellen der Konfigurationsdatei phinx.yml:
\npaths:\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\nBeispiel 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\nAusführen der Migrationen:
\nvendor/bin/phinx migrate -e development\n\n\n2. Doctrine Migrations (doctrine/migrations)
\nDoctrine Migrations ist Teil des Doctrine ORM-Ökosystems. Ideal für Projekte, die bereits Doctrine verwenden. Unterstützt alle gängigen DBMS.
\n\nInstallation:
\ncomposer require doctrine/migrations\n\n\nKonfiguration (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\nBeispiel 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 Auch in der Bibliothek
QR-Code-Generator in C# (.NET) mit QRCoder
Arbeiten mit CSV in Java: Bibliotheken OpenCSV und Apache Commons CSV
GraphQL in TypeScript: Bibliotheken für typsichere APIs
Datenvalidierung in C++: Bibliotheken und Methoden (libvalidate, nlohmann/json, Boost)