Похоже, что вы ищете Migrations class. Это довольно новая библиотека, и документация на данный момент не слишком хороша, на мой взгляд.
Если вы включите эту библиотеку в application/config/migrations.php
и загрузите ее, она создаст таблицу базы данных с именем migrations
. Рабочий оттуда следующее:
- Создать новый файл под
application/migrations
убедитесь, что вы называете его с последовательно нумеруются имя файла, как 001_some_descriptive_name.php
. Формат важен, ровно 3 номера и по крайней мере один _
после них.
- В новом файле создайте класс с именем после имени файла, поэтому
001_some_descriptive_name.php
должен содержать класс Migration_Some_descriptive_name
и расширить класс CI_Migration
. Корпус с именем класса важен, сначала Migration_
, затем один верхний регистр письмо, затем строчный.
- Создать общественный
up
и общественный down
метод внутри класса
- Внутри вверх метод добавить код миграции, который изменяет базу данных. Вы можете использовать библиотеку db forge или просто старые звонки
$this->db->query()
. Dbforge более портативен, если вам нужно поддерживать несколько систем баз данных, вероятно, лучше использовать их.
- Внутри метода
down
добавить код, который будет отменять эффекты up
. Если up
добавляет столбец, то down
должен удалить этот столбец, если up
создает таблицу, down
должен удалить эту таблицу и т. Д.
- После того как вы закончили свой класс миграции, удалите
migration_version
внутри файла конфигурации миграции.
- Создайте загрузки контроллера библиотеку миграции и вызвать
$this->migration->current()
это будет проверять версию из таблицы базы данных migration
и запустить классы миграции up
или down
метод для того, чтобы достичь версии миграции в конфигурационном файле вы установили на шаге 6. Так например, если в базе данных указано, что вы находитесь в версии 2, а в конфиге говорится, что вы должны быть на 5, тогда он будет запускать метод миграции из 003_...
, 004_...
, 005_..
. Если вы установите более низкое число, то будут вызываться текущие методы down
. База данных начинает подсчет с 0, поэтому не создавайте файл 000_...
.
Если вы чувствуете приключений вы можете создать крюк, который загружает класс миграции и запускает get_instance()->migration->latest()
на каждой странице поэтому каждая среда будет обновлять БД автоматически, как только вы развернуть новый класс миграции.
Если вы достаточно дисциплинированы, чтобы выписывать SQL для каждого изменения, отлично. Если у вас несколько окружений, хотя (более 2), даже этого может быть недостаточно. В последнее время я использовал инструменты сравнения mysql workbench db для переноса изменений в базе данных; он работает достаточно хорошо. –
Я использую среду разработки, тестирования и производства. Изменения в базе данных просты по своей природе, и я обрабатывал их только путем копирования/вставки через Navicat. Я просто ищу больше ** профессиональных **, чтобы справиться с этим. Инструмент Workbench фактически создает запрос sql для исправления обновлений? –
Я только что узнал, что Navicat имеет инструменты Data & Structure Compare и Sync, встроенные в версию, которая у меня отличная, но мне все еще нравится программное решение. –