Tengo un objeto "esquema" que utilizo - pero usted podría hacer lo mismo sin clases ..
Lo que se quiere hacer es crear un 'db_schema_versions
' tabla:
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
Después su base de datos puede rastrear en qué versión está: puede hacer actualizaciones de SQL automáticamente.
Debe bloquear su tabla de esquema mientras actualiza el esquema. De esta manera, no tendrás dos solicitudes en el mismo momento tratando de actualizar tu esquema.
Por lo tanto - un seguimiento de la versión que está actualizando desde - construir un gran cambio - algo como esto:
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
si el usuario se está actualizando de la versión 2 a la versión 6. ¿Podría iterar sobre cada versión 2-6 y ejecutar cada SQL en el conmutador 2,3,4,5 y 6 para que cada actualización en el conmutador sea solo la sql para actualizar desde la versión anterior? – JasonDavis