/** * Loads a database result, either as a new record for this model, or as * an iterator for multiple rows. * * @chainable * @param bool $multiple Return an iterator or load a single row * @return ORM|Database_Result */ protected function _load_result($multiple = FALSE) { $this->_db_builder->from(array($this->_table_name, $this->_object_name)); if ($multiple === FALSE) { // Only fetch 1 record $this->_db_builder->limit(1); } // Select all columns by default $this->_db_builder->select_array($this->_build_select()); if (!isset($this->_db_applied['order_by']) and !empty($this->_sorting)) { foreach ($this->_sorting as $column => $direction) { if (strpos($column, '.') === FALSE) { // Sorting column for use in JOINs $column = $this->_object_name . '.' . $column; } $this->_db_builder->order_by($column, $direction); } } if ($multiple === TRUE) { // Return database iterator casting to this object type $result = $this->_db_builder->as_object(get_class($this))->execute($this->_db); $this->reset(); return $result; //直接返回资源数组. } else { // Load the result as an associative array $result = $this->_db_builder->as_assoc()->execute($this->_db); $this->reset(); if ($result->count() === 1) { // Load object values $this->_load_values($result->current()); } else { // Clear the object, nothing was found $this->clear(); } return $this; } }
/** * Returns results as objects * * @param string|bool $class TRUE for StdClass * @param array|null $params * @return Kohana_Database_Query */ public function as_object($class = TRUE, array $params = NULL) { // Class is TRUE, default to the model if ($class === TRUE and $this->_meta) { $class = Jelly::class_name($this->_meta->model()); } return parent::as_object($class); }