From 5026406fe0d4bdd25c35b69187e6f968b5d4b2e4 Mon Sep 17 00:00:00 2001 From: Jamie Matthews Date: Mon, 20 Sep 2010 13:30:17 +0100 Subject: Refactor and split up save method --- idiorm.php | 70 +++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 30 deletions(-) (limited to 'idiorm.php') diff --git a/idiorm.php b/idiorm.php index f2b932b..28d0703 100644 --- a/idiorm.php +++ b/idiorm.php @@ -607,43 +607,16 @@ $values = array_values($this->_dirty_fields); if ($this->_update_or_insert == self::UPDATE) { - // If there are no dirty values, do nothing if (count($values) == 0) { return true; } - - $query[] = "UPDATE"; - $query[] = $this->_table_name; - $query[] = "SET"; - - $field_list = array(); - foreach ($this->_dirty_fields as $key => $value) { - $field_list[] = "$key = ?"; - } - $query[] = join(", ", $field_list); - - $query[] = "WHERE"; - $query[] = $this->_get_id_column_name(); - $query[] = "= ?"; + $query = $this->_build_update(); $values[] = $this->id(); - - } else { - $query[] = "INSERT INTO"; - $query[] = $this->_table_name; - $query[] = "(" . join(", ", array_keys($this->_dirty_fields)) . ")"; - $query[] = "VALUES"; - - $placeholders = array(); - $dirty_field_count = count($this->_dirty_fields); - for ($i = 0; $i < $dirty_field_count; $i++) { - $placeholders[] = "?"; - } - - $query[] = "(" . join(", ", $placeholders) . ")"; + } else { // INSERT + $query = $this->_build_insert(); } - $query = join(" ", $query); self::_setup_db(); $statement = self::$_db->prepare($query); $success = $statement->execute($values); @@ -657,6 +630,43 @@ return $success; } + /** + * Build an UPDATE query + */ + protected function _build_update() { + $query = array(); + $query[] = "UPDATE {$this->_table_name} SET"; + + $field_list = array(); + foreach ($this->_dirty_fields as $key => $value) { + $field_list[] = "$key = ?"; + } + $query[] = join(", ", $field_list); + $query[] = "WHERE"; + $query[] = $this->_get_id_column_name(); + $query[] = "= ?"; + return join(" ", $query); + } + + /** + * Build an INSERT query + */ + protected function _build_insert() { + $query[] = "INSERT INTO"; + $query[] = $this->_table_name; + $query[] = "(" . join(", ", array_keys($this->_dirty_fields)) . ")"; + $query[] = "VALUES"; + + $placeholders = array(); + $dirty_field_count = count($this->_dirty_fields); + for ($i = 0; $i < $dirty_field_count; $i++) { + $placeholders[] = "?"; + } + + $query[] = "(" . join(", ", $placeholders) . ")"; + return join(" ", $query); + } + /** * Delete this record from the database */ -- cgit v1.2.3