license
This commit is contained in:
146
api/migration_template.php
Normal file
146
api/migration_template.php
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
/**
|
||||
* Migration Template for API Module
|
||||
*
|
||||
* Copy this file and rename it to: {version}_version_{version}.php
|
||||
* Example: 212_version_212.php
|
||||
*
|
||||
* Replace {VERSION} with the actual version number
|
||||
* Replace {DESCRIPTION} with a brief description of what this migration does
|
||||
*/
|
||||
|
||||
defined('BASEPATH') or exit('No direct script access allowed');
|
||||
|
||||
class Migration_Version_{VERSION} extends App_module_migration
|
||||
{
|
||||
/** @var CI_DB_query_builder */
|
||||
protected $db;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
// Properly initialize the database once the migration is constructed
|
||||
$CI = &get_instance();
|
||||
$CI->load->database();
|
||||
$this->db = $CI->db;
|
||||
}
|
||||
|
||||
public function up()
|
||||
{
|
||||
// {DESCRIPTION}
|
||||
// Add your database upgrade logic here
|
||||
|
||||
// Example: Create a new table
|
||||
/*
|
||||
$this->db->query("
|
||||
CREATE TABLE IF NOT EXISTS `" . db_prefix() . "api_custom_table` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`description` text,
|
||||
`created_at` datetime NOT NULL,
|
||||
`updated_at` datetime DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
");
|
||||
*/
|
||||
|
||||
// Example: Add a new column to existing table
|
||||
/*
|
||||
if (!$this->db->field_exists('new_column', db_prefix() . 'existing_table')) {
|
||||
$this->db->query("
|
||||
ALTER TABLE `" . db_prefix() . "existing_table`
|
||||
ADD `new_column` varchar(255) NULL AFTER `existing_column`
|
||||
");
|
||||
}
|
||||
*/
|
||||
|
||||
// Example: Create an index
|
||||
/*
|
||||
$this->db->query("
|
||||
ALTER TABLE `" . db_prefix() . "api_usage_logs`
|
||||
ADD INDEX `idx_api_logs_user` (`user_id`, `created_at`)
|
||||
");
|
||||
*/
|
||||
|
||||
// Example: Insert default data
|
||||
/*
|
||||
$this->db->insert(db_prefix() . 'api_settings', [
|
||||
'setting_name' => 'new_feature_enabled',
|
||||
'setting_value' => '1',
|
||||
'created_at' => date('Y-m-d H:i:s')
|
||||
]);
|
||||
*/
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
// Reverse the changes made in up()
|
||||
// This method should undo everything that up() did
|
||||
|
||||
// Example: Drop a table
|
||||
/*
|
||||
$this->db->query("DROP TABLE IF EXISTS `" . db_prefix() . "api_custom_table`");
|
||||
*/
|
||||
|
||||
// Example: Remove a column
|
||||
/*
|
||||
if ($this->db->field_exists('new_column', db_prefix() . 'existing_table')) {
|
||||
$this->db->query("
|
||||
ALTER TABLE `" . db_prefix() . "existing_table`
|
||||
DROP COLUMN `new_column`
|
||||
");
|
||||
}
|
||||
*/
|
||||
|
||||
// Example: Drop an index
|
||||
/*
|
||||
$this->db->query("
|
||||
ALTER TABLE `" . db_prefix() . "api_usage_logs`
|
||||
DROP INDEX `idx_api_logs_user`
|
||||
");
|
||||
*/
|
||||
|
||||
// Example: Remove inserted data
|
||||
/*
|
||||
$this->db->delete(db_prefix() . 'api_settings', ['setting_name' => 'new_feature_enabled']);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
MIGRATION BEST PRACTICES:
|
||||
|
||||
1. Always check if fields/tables exist before creating/altering
|
||||
2. Use db_prefix() for all table names
|
||||
3. Include both up() and down() methods
|
||||
4. Test migrations on a copy of production data first
|
||||
5. Keep migrations atomic (each migration does one thing)
|
||||
6. Document what each migration does in comments
|
||||
7. Use transactions for complex operations when possible
|
||||
|
||||
VERSION NUMBERING:
|
||||
- Use incremental version numbers (101, 102, 103, etc.)
|
||||
- Major version jumps (200, 201) for significant changes
|
||||
- Keep version numbers unique across all migrations
|
||||
|
||||
TESTING MIGRATIONS:
|
||||
1. Backup your database before running migrations
|
||||
2. Test on development environment first
|
||||
3. Run migrations using: php migration_runner.php
|
||||
4. Verify data integrity after migration
|
||||
5. Test rollback functionality: php migration_runner.php --rollback
|
||||
|
||||
EXAMPLE USAGE:
|
||||
# Run all pending migrations
|
||||
php migration_runner.php
|
||||
|
||||
# Run migrations up to specific version
|
||||
php migration_runner.php --target=205
|
||||
|
||||
# Rollback to specific version
|
||||
php migration_runner.php --rollback --target=200
|
||||
|
||||
# Rollback one version
|
||||
php migration_runner.php --rollback
|
||||
*/
|
||||
Reference in New Issue
Block a user