Saya memiliki objek "Skema" yang saya gunakan - tetapi Anda dapat melakukan hal yang sama tanpa kelas..
Yang ingin Anda lakukan adalah membuat 'db_schema_versions
' tabel:
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
Setelah basis data Anda dapat melacak versi # apa - ia dapat melakukan pemutakhiran SQL secara otomatis.
Anda harus mengunci tabel skema Anda saat memutakhirkan skema. Dengan cara ini Anda tidak akan memiliki dua permintaan pada saat yang sama yang mencoba meningkatkan versi skema Anda.
Jadi - pantau terus versi yang Anda tingkatkan versinya - buat sakelar besar - kira-kira seperti ini:
class SNTrack_Db_Schema extends MW_Db_Schema_Abstract {
protected $table = "sntrack_db_schema";
protected $version = 5;
protected function upgrade($fromVersion) {
// don't break
switch($fromVersion) {
case 0:
$this->db->query('CREATE TABLE sntrack_inbound_shipment (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`from` VARCHAR(255) NOT NULL,
`date` DATE NOT NULL,
`invoice` VARCHAR(255) NOT NULL,
`notes` TEXT
)');
$this->setVersion(1);
case 1:
$this->db->query('ALTER TABLE sntrack_details ADD `shipment_id` INT');
$this->db->query('ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0');
$this->db->query('CREATE TABLE sntrack_inventory_shipment (
`shipment_id` INT NOT NULL,
`product_id` INT NOT NULL,
`qty` INT NOT NULL,
PRIMARY KEY (`shipment_id`, `product_id`)
)');
$this->setVersion(2);
...etc