Dzisiaj spotkałem się z małym problemem jeśli chodzi o cache`wanie zapytań do bazy danych.
Mam taki kod w pliku Db_MyTable
class Db_MyTable { //... public function getRow($index, $name) { $db = $this->_dbTable; $cacheId = $this->_cacheId.$index.'_'.$name; if($this->_cache->test($cacheId)) { $row = $this->_cache->load($cacheId); } else { $select = $db->select() $row = $db->fetchRow($select); $this->_cache->save($row, $cacheId); } return $row; } //... }
Więc wyświetla mi wartości z obiektu:
Zend_Db_Table_Row Object ( ( [index] => default [name] => controller [value] => 22 [description] => ) ( [index] => default [name] => controller [value] => 22 [description] => ) ( ) [_table:protected] => [_connected:protected] => [_readOnly:protected] => [_tableClass:protected] => Db_Option_Table ( [1] => index [2] => name ) )
Tam gdzie jest "[_table:protected] => " powinien znajdować się obiekt klasy Zend_Db_Table_Abstract a nic tam nie ma. Ten problem pojawia się gdy dane pobierane są z cache, natomiast jeśli wykonane zostaje zapytanie do bazy danych, w tedy nie ma żadnego problemu.
Nie wiem o co tu chodzi. Mam do tego małe rozwiązanie w pliku Db_MyTable
if($this->_cache->test($cacheId)) { $row = $this->_cache->load($cacheId); $row->setTable($this->_dbTable) //W tym miejscu ustawiamy odwołanie do obiektu. } else {
Nie jest to wielki problem lecz bardzo bym chciał się dowiedzieć czemu tak się dzieje...
Pozdrawiam.