public function save() { $fieldMap = []; $function = new \ReflectionClass(get_called_class()); $table = strtolower($function->getShortName()); foreach (DB::getColumns($table) as $column) { $fieldMap[$column] = $this->{$column}; } if ($fieldMap["id"] == null) { DB::insert($table, $fieldMap); } else { $updateFields = $fieldMap; unset($updateFields["id"]); DB::update($table, $updateFields, $fieldMap["id"]); } }
public function runMigrations() { global $argv; $this->setupDatabaseConnection(); DB::query("CREATE TABLE IF NOT EXISTS migrations (\n\t\t\t\t\t\t\t id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT,\n\t\t\t\t\t\t\t migration INTEGER,\n\t\t\t\t\t\t\t ran_at DATETIME\n\t\t\t\t)"); switch ($argv[1]) { case "show": foreach (DB::fetch("SELECT migration, ran_at FROM migrations") as $migration) { echo $migration["migration"] . " => " . $migration["ran_at"] . PHP_EOL; } break; case "count": echo DB::column("SELECT COUNT(id) FROM migrations"); break; case "run": $migrations = DB::fetch("SELECT migration FROM migrations"); $migrationArray = []; foreach ($migrations as $migration) { $migrationArray[] = $migration["migration"]; } foreach (glob("application/migrations/*.php") as $filename) { if (!in_array($filename, $migrationArray)) { try { include $filename; DB::insert("migrations", ["migration" => $filename, "ran_at" => (new \DateTime())->format("Y-m-d")]); } catch (\Exception $e) { echo "[HF_Core] - Migration error - {$e}"; exit(1); } } } break; case "clear": DB::query("DELETE FROM migrations"); break; case "reset": switch ($this->config["DATABASE_TYPE"]) { case "SQLITE": DB::$c = null; unlink($this->config["DATABASE_FILE"]); break; case "MYSQL": DB::query("DROP DATABASE " . $this->config['MYSQL_DBNAME']); DB::query("CREATE DATABASE " . $this->config['MYSQL_DBNAME']); break; } break; } }