blob: 9a7b10d642b415843ff801696f715010abeac779 [file] [log] [blame]
Greg Akerf41c9cf2011-12-25 00:15:17 -06001################
2Migrations Class
3################
4
Joe McFrederick596e48d2012-09-04 14:25:47 -04005Migrations are a convenient way for you to alter your database in a
6structured and organized manner. You could edit fragments of SQL by hand
7but you would then be responsible for telling other developers that they
8need to go and run them. You would also have to keep track of which changes
9need to be run against the production machines next time you deploy.
10
11The database table **migration** tracks which migrations have already been
12run so all you have to do is update your application files and
13call **$this->migrate->current()** to work out which migrations should be run.
14The current version is found in **config/migration.php**.
15
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040016********************
17Migration file names
18********************
19
20Each Migration is run in numeric order forward or backwards depending on the
21method taken. Two numbering styles are available:
22
23* **Sequential:** each migration is numbered in sequence, starting with **001**.
24 Each number must be three digits, and there must not be any gaps in the
25 sequence. (This was the numbering scheme prior to CodeIgniter 3.0.)
26* **Timestamp:** each migration is numbered using the timestamp when the migration
27 was created, in **YYYYMMDDHHIISS** format (e.g. **20121031100537**). This
28 helps prevent numbering conflicts when working in a team environment, and is
29 the preferred scheme in CodeIgniter 3.0 and later.
30
Jonathon Hillb719bfd2012-11-12 09:03:36 -050031The desired style may be selected using the **$config['migration_type']**
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040032setting in your **migration.php** config file.
33
34Regardless of which numbering style you choose to use, prefix your migration
35files with the migration number followed by an underscore and a descriptive
36name for the migration. For example:
37
38* **001_add_blog.php** (sequential numbering)
39* **20121031100537_add_blog.php** (timestamp numbering)
40
Joe McFrederick596e48d2012-09-04 14:25:47 -040041******************
42Create a Migration
43******************
Joe McFrederick596e48d2012-09-04 14:25:47 -040044
45This will be the first migration for a new site which has a blog. All
46migrations go in the folder **application/migrations/** and have names such
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040047as **20121031100537_add_blog.php**.::
48
49 <?php
Joe McFrederick596e48d2012-09-04 14:25:47 -040050
51 defined('BASEPATH') OR exit('No direct script access allowed');
52
53 class Migration_Add_blog extends CI_Migration {
54
55 public function up()
56 {
57 $this->dbforge->add_field(array(
58 'blog_id' => array(
59 'type' => 'INT',
60 'constraint' => 5,
61 'unsigned' => TRUE,
62 'auto_increment' => TRUE
63 ),
64 'blog_title' => array(
65 'type' => 'VARCHAR',
66 'constraint' => '100',
67 ),
68 'blog_description' => array(
69 'type' => 'TEXT',
70 'null' => TRUE,
71 ),
72 ));
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040073 $this->dbforge->add_key('blog_id', TRUE);
Joe McFrederick596e48d2012-09-04 14:25:47 -040074 $this->dbforge->create_table('blog');
75 }
76
77 public function down()
78 {
79 $this->dbforge->drop_table('blog');
80 }
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040081 }
Joe McFrederick596e48d2012-09-04 14:25:47 -040082
83Then in **application/config/migration.php** set **$config['migration_version'] = 1;**.
84
85*************
86Usage Example
87*************
88
89In this example some simple code is placed in **application/controllers/migrate.php**
90to update the schema.::
91
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040092 <?php
93
94 class Migrate extends CI_Controller
Joe McFrederick596e48d2012-09-04 14:25:47 -040095 {
Jonathon Hill34c8b9c2012-10-31 14:02:35 -040096 public function index()
97 {
98 $this->load->library('migration');
99
100 if ($this->migration->current() === FALSE)
101 {
102 show_error($this->migration->error_string());
103 }
104 }
Joe McFrederick596e48d2012-09-04 14:25:47 -0400105 }
106
107******************
108Function Reference
109******************
110
Joe McFrederick596e48d2012-09-04 14:25:47 -0400111$this->migration->current()
112============================
113
114The current migration is whatever is set for **$config['migration_version']** in
115**application/config/migration.php**.
116
117$this->migration->error_string()
118=================================
119
120This returns a string of errors while performing a migration.
121
122$this->migration->find_migrations()
123====================================
124
125An array of migration filenames are returned that are found in the **migration_path**
126property.
127
128$this->migration->latest()
129===========================
130
131This works much the same way as current() but instead of looking for
132the **$config['migration_version']** the Migration class will use the very
133newest migration found in the filesystem.
134
135$this->migration->version()
136============================
137
138Version can be used to roll back changes or step forwards programmatically to
139specific versions. It works just like current but ignores **$config['migration_version']**.::
140
141 $this->load->library('migration');
142
143 $this->migration->version(5);
144
145*********************
146Migration Preferences
147*********************
148
149The following is a table of all the config options for migrations.
150
Jonathon Hill34c8b9c2012-10-31 14:02:35 -0400151========================== ====================== ========================== =============================================
152Preference Default Options Description
153========================== ====================== ========================== =============================================
154**migration_enabled** FALSE TRUE / FALSE Enable or disable migrations.
155**migration_path** APPPATH.'migrations/' None The path to your migrations folder.
156**migration_version** 0 None The current version your database should use.
157**migration_table** migrations None The table name for storing the schema
158 version number.
159**migration_auto_latest** FALSE TRUE / FALSE Enable or disable automatically
160 running migrations.
vlakoff024cfec2013-01-09 18:10:20 +0100161**migration_type** 'timestamp' 'timestamp' / 'sequential' The type of numeric identifier used to name
Jonathon Hill34c8b9c2012-10-31 14:02:35 -0400162 migration files.
163========================== ====================== ========================== =============================================