. */ /** * Doctrine_Hydrate_Record * defines a record fetching strategy for Doctrine_Hydrate * * @package Doctrine * @subpackage Hydrate * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_Hydrator_RecordDriver extends Doctrine_Locator_Injectable { protected $_collections = array(); protected $_records = array(); protected $_tables = array(); public function getElementCollection($component) { $coll = new Doctrine_Collection($component); $this->_collections[] = $coll; return $coll; } public function getLastKey($coll) { $coll->end(); return $coll->key(); } public function initRelated($record, $name) { return true; /* if ( ! is_array($record)) { $record[$name]; return true; } return false; */ } public function registerCollection(Doctrine_Collection $coll) { $this->_collections[] = $coll; } /** * isIdentifiable * returns whether or not a given data row is identifiable (it contains * all primary key fields specified in the second argument) * * @param array $row * @param Doctrine_Table $table * @return boolean */ public function isIdentifiable(array $row, Doctrine_Table $table) { $primaryKeys = $table->getIdentifierColumnNames(); if (is_array($primaryKeys)) { foreach ($primaryKeys as $id) { if ( ! isset($row[$id])) { return false; } } } else { if ( ! isset($row[$primaryKeys])) { return false; } } return true; } public function getNullPointer() { return self::$_null; } public function getElement(array $data, $component) { if ( ! isset($this->_tables[$component])) { $this->_tables[$component] = Doctrine_Manager::getInstance()->getMapper($component); $this->_tables[$component]->setAttribute(Doctrine::ATTR_LOAD_REFERENCES, false); } $this->_tables[$component]->setData($data); $record = $this->_tables[$component]->getRecord(); if ( ! isset($this->_records[$record->getOid()]) ) { $record->clearRelated(); $this->_records[$record->getOid()] = $record; } return $record; } public function flush() { // take snapshots from all initialized collections foreach ($this->_collections as $key => $coll) { $coll->takeSnapshot(); } foreach ($this->_tables as $table) { $table->setAttribute(Doctrine::ATTR_LOAD_REFERENCES, true); } } }