Обновляемый модуль Codeigniter для работы с базой данных - PullRequest
0 голосов
/ 10 сентября 2011

Я пытаюсь создать свой собственный cms с использованием Codeigniter. Я уже написал несколько модулей. Но со временем я сделал с ними некоторые изменения. Теперь, если я хочу обновить модуль. Я отправляю файлы с помощью ftp и изменяю поля базы данных с помощью phpmyadmin.

Требуется много времени и высокая вероятность что-то изменить, и для каждого проекта, которым я пользуюсь, я должен повторить эти изменения снова.

Теперь я планирую сделать систему установки.

Структура каталогов моих модулей, как показано ниже:

/modules
/modules/survey/
/modules/survey/config
/modules/survey/config/autoload.php
/modules/survey/config/config.php
/modules/survey/config/routes.php
/modules/survey/config/install.php
/modules/survey/controllers
/modules/survey/controllers/entry.php...
/modules/survey/models
/modules/survey/models/survey.php...
/modules/survey/views
/modules/survey/views/index.php...

Я думал, что все модули должны иметь файл install.php в директории config. Это сохраняет настройку освобожденного модуля. Как ниже:

$config['version']  = 1.1;  //or 1.2, 1.3 etc.
$config['module'] = 'Survey Module';
$config['module_slug'] = 'survey';
$config['module_db_table'] = 'module_survey'; 

У меня уже есть таблица instal_modules:

id, module, module_slug, version

Теперь я пытаюсь создать скрипт установки. Как ниже:

Перед запуском архивирую файлы модуля.

1- upload zip file with an installation page to a temp directory 
2- unzip the module in this temp direcorty
3- Find install.php
4- Get modules information from install.php
5- Check if this module already in installed_modules table.
6a) If it's not: I will make a new module_survey table. And copy this temp directory into the real modules directory.
6b) If it's already : I have to change the structure of this table without lossing the data added before. Delete all module files and copy the new ones from temp into the modules directory.
7- When everything done, Delete temp directory.

Я застрял в 6a и 6b.

Для 6a, Как мне создать e.x таблицу 'module_survey'. Должен ли я добавить $ config ['db_query'] в install.php как

$config['db_query'] = "CREATE TABLE IF NOT EXISTS `module_survey` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`lang_id` int(11) NOT NULL DEFAULT '1',
`usort` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
";

и запустите этот запрос. Или каков твой совет здесь? Там может быть не только одна таблица, там должно быть 2 или более с отношениями друг к другу для разных модулей.

и для 6b:

Я подумал, что мне следует создать новую временную таблицу, такую ​​как "temp_module_survey".

старые поля =
$ oldFields = $ this-> db-> field_data ('module_survey');

для новых полей = $ newFields = $ this-> db-> field_data ('temp_module_survey');

сравнить вновь добавленные поля, которые удалены и чьи fieldData изменились. А также добавить новые поля в oldTable Удалите ненужные поля из oldTable и обновить поля, которые изменили fieldData.

Затем удалите временную таблицу.

Для краткости, что я должен сделать для изменений базы данных без потери старых данных.

Я надеюсь, что смогу объяснить.

Спасибо.

1 Ответ

0 голосов
/ 15 сентября 2011

Фил Стерджен код-миграция может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...