/** * Syncs all available migration files with the database * * @chainable * @return Minion_Migration_Manager Chainable instance */ public function sync_migration_files() { // Get array of installed migrations with the id as key $installed = $this->_model->fetch_all('id'); $available = $this->_model->available_migrations(); $all_migrations = array_merge(array_keys($installed), array_keys($available)); foreach ($all_migrations as $migration) { // If this migration has since been deleted if (isset($installed[$migration]) and !isset($available[$migration])) { // We should only delete a record of this migration if it does // not exist in the "real world" if ($installed[$migration]['applied'] === '0') { $this->_model->delete_migration($installed[$migration]); } } elseif (!isset($installed[$migration]) and isset($available[$migration])) { $this->_model->add_migration($available[$migration]); } elseif ($installed[$migration]['description'] !== $available[$migration]['description']) { $this->_model->update_migration($installed[$migration], $available[$migration]); } } return $this; }