/** * * Inserts one row to the model table and deletes cache entries. * * @param array $data The row data to insert. * * @return int|bool On success, the last inserted ID if there is an * auto-increment column on the model (otherwise boolean true). On failure * an exception from PDO bubbles up. * * @throws Solar_Sql_Exception on failure of any sort. * * @see Solar_Sql_Model_Cache::deleteAll() * */ public function insert($data) { if (!is_array($data)) { throw $this->_exception('ERR_DATA_NOT_ARRAY', array('method' => 'insert')); } // reset affected rows $this->_affected_rows; // remove non-existent table columns from the data foreach ($data as $key => $val) { if (empty($this->_table_cols[$key])) { unset($data[$key]); // not in the table, so no need to check for autoinc continue; } // remove empty autoinc columns to soothe postgres, which won't // take explicit NULLs in SERIAL cols. if ($this->_table_cols[$key]['autoinc'] && empty($val)) { unset($data[$key]); } } // perform the insert and track affected rows $this->_affected_rows = $this->_sql->insert($this->_table_name, $data); // does the table have an autoincrement column? $autoinc = null; foreach ($this->_table_cols as $name => $info) { if ($info['autoinc']) { $autoinc = $name; break; } } // return the last insert id, or just "true" ? if ($autoinc) { $id = $this->_sql->lastInsertId($this->_table_name, $autoinc); } // clear the cache for this model and related models $this->_cache->deleteAll(); if ($autoinc) { return $id; } else { return true; } }