Создание миграции из существующей базы данных в Yii или Laravel

Я работаю над проектом с довольно сложной базой данных (150+ таблиц). Чтобы иметь возможность поддерживать изменения, я решил добавить миграции, предпочтительно используя Yii или Laravel.

Знает ли кто-нибудь, может ли генерация первоначальной миграции из существующей базы данных?

Создание этого вручную:

  • принимать навсегда и
  • быть очень подверженным ошибкам.

Если нет способа, кто-нибудь знает хорошую фреймворк на PHP, поддерживающий такую ​​функциональность?

Инструкции для достижения этого в Yii:

  1. Добавьте настройки подключения к базе данных в protected/config/console.php .

  2. Запустите yiic migrate create initial чтобы создать код заглушки для миграции.

  3. Скопируйте содержимое этого объекта в protected/commands/InitialDbMigrationCommand.php .

  4. Запустите yiic initialdbmigration 'name_of_your_database' > initial_migration.php для генерации методов up() и down() для начальной миграции базы данных.

  5. Скопируйте и вставьте 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 из существующей базы данных.

Поскольку он не делает никаких предположений в базе данных, он должен работать с любой структурой базы данных, даже сохраняя имена исходного индекса и внешнего ключа.

https://github.com/Xethron/migrations-generator

Что касается Yii 1.x, то schmunk создал замечательную database-command yiic-команды database-command .

Эта команда охватывает только миграцию. Вы должны написать свои собственные миграции вниз .

Чтобы использовать его:

  1. Получите последнюю версию GitHub и поместите ее в папку /protected/commands (создайте ее, если она не существует). Обратите внимание, что вам нужно поместить содержимое как есть ( без подпапки для этой конкретной команды), что противоречит тому, что мы делаем, например, для расширений.

  2. Переименуйте файл EDatabaseCommand.php (и класс внутри) в DatabaseCommand.php , если вы хотите использовать команду yiic database (как предложено в документах). Без этого исправления вам придется использовать команду yiic edatabase , так как есть небольшая несогласованность между документами и кодом (по крайней мере, в новейшей версии, начиная с написания этого сообщения, возможно, schmunk исправит это).

  3. После этого перейдите в 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 «Эта команда для создания схемы из существующей базы данных».