/** * Populate the given data object * * @param t41\ObjectModel\DataObject $do data object instance * @return boolean */ public function read(ObjectModel\DataObject $do, $data = null) { if (!$do->getUri() instanceof ObjectUri) { throw new Exception('MISSING_URI_IN_DATAOBJECT'); } if (is_array($data) && count($data) > 0) { /* populate data object */ $do->populate($data, $this->_mapper); $do->resetChangedState(); return true; } // get table to use $table = $this->_getTableFromUri($do->getUri()); if (!$table) { \Zend_Debug::dump($do->getUri()); throw new Exception('MISSING_DBTABLE_PARAM'); } // primary key is either part of the mapper configuration or 'id' $pkey = $this->_mapper ? $this->_mapper->getPrimaryKey($do->getUri()->getClass()) : Backend::DEFAULT_PKEY; $this->_connect(); // get data from backend $select = $this->_ressource->select()->from($table, $this->_getColumns($do))->limit(1); /* add clause for primary key(s) */ foreach ($this->_preparePrimaryKeyClauses($do) as $key => $val) { $select->where("{$key} = ?", $val); } try { $data = $this->_ressource->fetchRow($select); } catch (\Exception $e) { echo $e->getMessage(); \Zend_Debug::dump($e->getTrace()); die; } if (empty($data)) { $do->resetUri(); return false; } /* complete url part of the object uri */ $do->getUri()->setUrl($table . '/' . $do->getUri()->getIdentifier()); /* populate data object */ $do->populate($data, $this->_mapper); $do->resetChangedState(); return true; }