Witam,

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
  1. class Db_MyTable {
  2. //...
  3. public function getRow($index, $name)
  4. {
  5. $db = $this->_dbTable;
  6. $cacheId = $this->_cacheId.$index.'_'.$name;
  7.  
  8. if($this->_cache->test($cacheId)) {
  9. $row = $this->_cache->load($cacheId);
  10. } else {
  11. $select = $db->select()
  12. ->where('`index` = ?', addslashes($index))
  13. ->where('`name` = ?', addslashes($name));
  14.  
  15. $row = $db->fetchRow($select);
  16.  
  17. $this->_cache->save($row, $cacheId);
  18. }
  19.  
  20. return $row;
  21. }
  22.  
  23. //...
  24. }


Więc wyświetla mi wartości z obiektu:
  1. Zend_Db_Table_Row Object
  2. (
  3. [_data:protected] => Array
  4. (
  5. [index] => default
  6. [name] => controller
  7. [value] => 22
  8. [description] =>
  9. )
  10.  
  11. [_cleanData:protected] => Array
  12. (
  13. [index] => default
  14. [name] => controller
  15. [value] => 22
  16. [description] =>
  17. )
  18.  
  19. [_modifiedFields:protected] => Array
  20. (
  21. )
  22.  
  23. [_table:protected] =>
  24. [_connected:protected] =>
  25. [_readOnly:protected] =>
  26. [_tableClass:protected] => Db_Option_Table
  27. [_primary:protected] => Array
  28. (
  29. [1] => index
  30. [2] => name
  31. )
  32.  
  33. )


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
  1. if($this->_cache->test($cacheId)) {
  2. $row = $this->_cache->load($cacheId);
  3. $row->setTable($this->_dbTable) //W tym miejscu ustawiamy odwołanie do obiektu.
  4. } else {


Nie jest to wielki problem lecz bardzo bym chciał się dowiedzieć czemu tak się dzieje...

Pozdrawiam.