Я работаю над проектом с довольно сложной базой данных (150+ таблиц). Чтобы иметь возможность поддерживать изменения, я решил добавить миграции, предпочтительно используя Yii или Laravel.
Знает ли кто-нибудь, может ли генерация первоначальной миграции из существующей базы данных?
Создание этого вручную:
Если нет способа, кто-нибудь знает хорошую фреймворк на PHP, поддерживающий такую функциональность?
Инструкции для достижения этого в Yii:
Добавьте настройки подключения к базе данных в protected/config/console.php
.
Запустите yiic migrate create initial
чтобы создать код заглушки для миграции.
Скопируйте содержимое этого объекта в protected/commands/InitialDbMigrationCommand.php
.
Запустите yiic initialdbmigration 'name_of_your_database' > initial_migration.php
для генерации методов up()
и down()
для начальной миграции базы данных.
Скопируйте и вставьте up()
и down()
методы из initial_migration.php
в файл, созданный в папке protected/migrations
на шаге 2.
« Doctrine Project » (также известный как Doctrine) имеет возможность создавать миграции БД для существующих структур БД, поэтому вы можете воссоздать существующую структуру. Его можно легко реализовать в Symfony, Laravel, также в Yii и во многих средах.
Образец из:
http://symfony.com/legacy/doc/doctrine/1_2/en/07-Migrations
Из базы данных
Если у вас есть существующая база данных, вы можете создать набор классов миграции, которые будут воссоздавать вашу базу данных, выполнив следующую команду.
$ ./symfony doctrine:generate-migrations-db
Из моделей
Если у вас есть существующий набор моделей, вы можете создать набор классов миграции, которые создадут вашу базу данных, выполнив следующую команду.
$ ./symfony doctrine:generate-migrations-models
Ну, так как миграция связана с настройкой структуры базы данных и внесением в нее изменений, а не с учетом текущей базы данных, такого способа нет.
И это также не шаг, который вам нужно сделать. Вы можете начать с того места, где вы находитесь в данный момент, что позволит вам вернуться к этому моменту. Это означает, что вы можете выполнять миграцию для своих текущих таблиц, не указывая их всю структуру, а только изменения.
Допустим, у вас есть таблица с именем user и вы хотите добавить к ней свое имя.
php artisan migrate:make add_firstname_to_user
Теперь перейдите в application/migrations
и найдите файл миграции, добавьте это
public function up() { Schema::table('user', function($table) { $table->string('firstname'); }); } public function down() { Schema::table('user', function($table) { $table->drop_column('firstname'); }); }
Теперь вы можете добавить migrate it
php artisan migrate:install // if you haven't run this, should only be once php artisan migrate
.. и откат с использованием
php artisan migrate:rollback
Это добавит или опустит имя столбца, не затрагивая вашу таблицу каким-либо другим способом.
Вот пакет Laravel, который я создал, который делает именно это. Он автоматически генерирует чистые и точные миграции Laravel из существующей базы данных.
Поскольку он не делает никаких предположений в базе данных, он должен работать с любой структурой базы данных, даже сохраняя имена исходного индекса и внешнего ключа.
Что касается Yii 1.x, то schmunk создал замечательную database-command
yiic-команды database-command
.
Эта команда охватывает только миграцию. Вы должны написать свои собственные миграции вниз .
Чтобы использовать его:
Получите последнюю версию GitHub и поместите ее в папку /protected/commands
(создайте ее, если она не существует). Обратите внимание, что вам нужно поместить содержимое как есть ( без подпапки для этой конкретной команды), что противоречит тому, что мы делаем, например, для расширений.
Переименуйте файл EDatabaseCommand.php
(и класс внутри) в DatabaseCommand.php
, если вы хотите использовать команду yiic database
(как предложено в документах). Без этого исправления вам придется использовать команду yiic edatabase
, так как есть небольшая несогласованность между документами и кодом (по крайней мере, в новейшей версии, начиная с написания этого сообщения, возможно, schmunk исправит это).
После этого перейдите в protected
папку на консоли и выполните yiic database dump migration_name --prefix=table_name
.
Это создаст файл protected/runtime/migration_name.php
с правильной датой и временем в начале имени файла, заполненным серией команд CDbMigration
чтобы воссоздать схему базы данных. Перейдите в раздел « Использование » в документах, чтобы узнать больше о команде настройки.
Я использую Yii и Laravel, и я не мог найти то, что вам нужно для любого из них. Они создают пустые файлы, и вам нужно создать сценарий миграции самостоятельно. Для таблицы из 150 таблиц будет сложным создание самих миграций, но это не так сложно, как вы себе представляете. Поскольку у вас уже есть информация о полях, это не должно занять так много времени, чтобы создать.
После некоторых исследований, вот что вам понадобится для Laravel: https://github.com/XCMer/larry-four-generator
(по крайней мере, по версии 4, кто знает, как долго это будет работать, Laravel слишком быстро меняется и имеет слишком много нарушений)
Вы хотите запустить php artisan larry:fromdb
и он покажет вам таблицы … Вы также можете исключить или обработать только определенные таблицы (посмотрите на readme).
Опять же, супер супер полезно, если вы хотите построить свою схему в чем-то вроде MySQL Workbench. Я также видел упоминание пакета, который будет анализировать файлы рабочего места … Но ссылка была мертва.
Вы также можете использовать этот пакет для larry с: https://github.com/JeffreyWay/Laravel-4-Generators
Затем вы можете создать строительные леса a la CakePHP.
В качестве альтернативы попробуйте этот пакет: https://github.com/barryvdh/laravel-migration-generator
Теперь есть один для Yii:
Это позволяет распределенной команде легко обновлять db локально, а затем распространять ее с другими разработчиками автоматически с остальной частью кода с помощью системы управления версиями (я использовал git). Он также выполняет полный исходный дамп db для xml и файл миграции.
home project: https://code.google.com/p/yii-automatically-generated-migration-files/
Исходный код: https://code.google.com/p/yii-automatically-generated-migration-files/source/checkout
Я создал его с нуля, так как меня раздражало то, что я должен был сделать это вручную, чтобы распространить его на свою команду.
Надеюсь, поможет!
Не стесняйтесь делиться ошибками, улучшениями и комментариями.
Я думаю, что ответ: https://github.com/jamband/yii2-schemadump для Yii2 «Эта команда для создания схемы из существующей базы данных».