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

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

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

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

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

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

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

4b9b3361

Ответ 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 "Эта команда для создания схемы из существующей базы данных".