Создание миграции из существующей базы данных в Yii или Laravel
Я работаю над проектом с довольно сложной базой данных (150+ таблиц). Чтобы иметь возможность поддерживать изменения, я решил добавить миграции, предпочтительно используя Yii или Laravel.
Знает ли кто-нибудь, возможно ли произвести первоначальную миграцию из существующей базы данных?
Создание этого вручную:
- возьмите навсегда и
- будет очень подвержен ошибкам.
Если нет способа, кто-нибудь знает хорошую фреймворк на PHP, поддерживающий такую функциональность?
Ответы
Ответ 1
Инструкции для выполнения этого в 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.
Ответ 2
'Doctrine Project' (aka 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
Ответ 3
Ну, так как миграция касается настройки структуры базы данных и внесения в нее изменений, а не для отражения текущей базы данных, такого способа нет.
И это также не шаг, который вам нужно сделать. Вы можете начать с того места, где вы находитесь в данный момент, что позволит вам вернуться к этому моменту. Это означает, что вы можете выполнять миграцию для своих текущих таблиц, не указывая их всю структуру, а только изменения.
Скажем, у вас есть таблица с именем 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
Это добавит или опустит имя столбца, не затрагивая вашу таблицу каким-либо другим способом.
Ответ 4
Вот пакет Laravel, который я создал, который делает именно это. Он автоматически генерирует чистые и точные миграции Laravel из существующей базы данных.
Поскольку он не делает каких-либо предположений базы данных, он должен работать с любой структурой базы данных, даже сохраняя имена исходного индекса и внешнего ключа.
https://github.com/Xethron/migrations-generator
Ответ 5
Что касается Yii 1.x, то schmunk создал замечательную команду database-command
yiic.
Эта команда охватывает только миграцию. Вы должны написать свои собственные миграции вниз.
Чтобы использовать его:
-
Получите самую новую версию из 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
команды для воссоздания вашей схемы базы данных. Посетите раздел Usage" в документах, чтобы узнать больше о команде настройки.
Ответ 6
Я использую как Yii, так и Laravel, и я не мог найти то, что вам нужно для любого из них. Оба они создают пустые файлы, и вам нужно создать миграцию script самостоятельно.
Для таблицы из 150 таблиц будет сложным создание самих миграций, но это не так сложно, как вы себе представляете. Поскольку у вас уже есть информация о полях, это не должно занять так много времени, чтобы создать.
Ответ 7
Проведя некоторое исследование, вот что вам понадобится для 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
Ответ 8
Теперь существует Yii:
Это позволяет распределенной команде легко обновлять db локально, а затем распространять ее с другими разработчиками автоматически с остальной частью кода с помощью системы управления версиями (я использовал git). Он также выполняет полный исходный db-дамп для xml и файл миграции.
проект дома:
https://code.google.com/p/yii-automatically-generated-migration-files/
исходный код:
https://code.google.com/p/yii-automatically-generated-migration-files/source/checkout
Я создал его с нуля, так как меня раздражало, что я должен был сделать это вручную, чтобы распространить его на мою команду.
Надеюсь, что это поможет!
Не стесняйтесь делиться ошибками, улучшениями и комментариями.
Ответ 9
Я думаю, что ответ: https://github.com/jamband/yii2-schemadump для Yii2
"Эта команда для создания схемы из существующей базы данных".