/** @param params the parameters to match against
 		@param defaults the default values to be passed to upsert
 		@return returns the primary key for a model using cached results */
 public function identifier($params, $defaults = array())
 {
     $key = $this->key($params);
     if (!isset($this->cache[$key])) {
         $model = $this->model;
         $changes = array("summary" => "none");
         $obj = $this->readonly ? new $this->model($this->db->filter($params)) : $model::upsert($this->db->filter($params), $params, $defaults, $changes);
         $this->cache[$key] = $obj->primaryKey();
         if ($changes["summary"] == "new") {
             DTLog::info(DTLog::colorize("New object '{$model}' ({$this->cache[$key]})", "warn"));
             DTLog::info($changes);
         }
     }
     return $this->cache[$key];
 }