Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Dlaczego metody fetchRow,fetchAll zwracają obiekt? szczegóły na dole
Forum PHP.pl > Forum > PHP > Frameworki
anonim1989
Witam.Od niedawna analizuje kod ZF.I nie mogę jednego pojąć.Otóż mam w ZF taką metode jak fetchAll która zwraca mi wszystkie rekordy z wybranej tabeli.Gdy zaglądam do klasy Zend_Db_Table_Abstract w której znajduje się ta metoda fetchAll.
Zwraca ona obiekt klasy Zend_Db_Table_Rowset,klasy której konstruktor nic nie zwraca.Dlaczego zwraca obiekt?
Przecież powinna mi zwrócić tablice w której znajdują się rekordy?
bardzo proszę o pomoc
Pawel_W
o ile dobrze pamiętam to:
  1. $db->fetchAll()->toArray()

winksmiley.jpg
LBO
Odpowiadają za to odpowiednie interfejsy i klasy
anonim1989
No dobra.Ale FetchAll mi się wykonuje tylko na końcu nie zwraca wartości:-(

Chcę wiedzieć czy te operacje na bazie danych dzieją się dopiero w po wywołaniu w akcjach jakiejś operacji na bazie danych?
darko
Cytat(anonim1989 @ 5.01.2011, 15:41:50 ) *
Witam.Od niedawna analizuje kod ZF.I nie mogę jednego pojąć.Otóż mam w ZF taką metode jak fetchAll która zwraca mi wszystkie rekordy z wybranej tabeli.Gdy zaglądam do klasy Zend_Db_Table_Abstract w której znajduje się ta metoda fetchAll.
Zwraca ona obiekt klasy Zend_Db_Table_Rowset,klasy której konstruktor nic nie zwraca.Dlaczego zwraca obiekt?
Przecież powinna mi zwrócić tablice w której znajdują się rekordy?
bardzo proszę o pomoc

Dziwne, bo coś tu nie gra z tym, co napisałeś. Domyślnie dane zwracane są jako tablica asocjacyjna:
  1. abstract class Zend_Db_Adapter_Abstract
  2. {
  3.  
  4. /**
  5.   * User-provided configuration
  6.   *
  7.   * @var array
  8.   */
  9. protected $_config = array();
  10.  
  11. /**
  12.   * Fetch mode
  13.   *
  14.   * @var integer
  15.   */
  16. protected $_fetchMode = Zend_Db::FETCH_ASSOC;


Poza tym, jeśli przypisujesz polu klasy X obiekt bazy danych w ten sposób:
  1. $this->pole = Zend_Db_Table::getDefaultAdapter();

to tak naprawdę zwracasz to, co zostało zdefiniowane w klasie Zend_Db_Table_Abstract czyli
  1. /**
  2.   * Default Zend_Db_Adapter_Abstract object.
  3.   *
  4.   * @var Zend_Db_Adapter_Abstract
  5.   */
  6. protected static $_defaultDb;


Dodatkowo możesz określić sposób zwracania danych za pomocą metody setFetchMode i chyba to jest rozwiązanie Twojego problemu.
anonim1989
Widocznie czegoś nie rozumiem.Mam taką metoda jak fetchAll.Którą wywołuje w IndexController:
$this->view->albums = $album->fetchAll();

I wiem ze album dziedziczy z Zend_Db_Table.Dlatego sprawdzam czy jest tam metoda FetchAll.Niema jej .Dlatego sprawdzam jego Parent czy posiada tą metoda FetchAll.I posiada a ta metoda wygląda tak:
  1. public function fetchAll($where = null, $order = null, $count = null, $offset = null)
  2. {
  3.  
  4.  
  5. if (!($where instanceof Zend_Db_Table_Select)) {
  6.  
  7. $select = $this->select();
  8. ///SELECT `album`.* FROM `album`
  9.  
  10. if ($where !== null) {
  11. $this->_where($select, $where);
  12.  
  13. }
  14.  
  15. if ($order !== null) {
  16. $this->_order($select, $order);
  17. }
  18.  
  19. if ($count !== null || $offset !== null) {
  20. $select->limit($count, $offset);
  21. }
  22.  
  23. } else {
  24. $select = $where;
  25. }
  26.  
  27. $rows = $this->_fetch($select);
  28.  
  29.  
  30.  
  31. $data = array(
  32. 'table' => $this,
  33. 'data' => $rows,
  34. 'readOnly' => $select->isReadOnly(),
  35. 'rowClass' => $this->getRowClass(),
  36. 'stored' => true
  37. );
  38.  
  39. $rowsetClass = $this->getRowsetClass();
  40. if (!class_exists($rowsetClass)) {
  41. require_once 'Zend/Loader.php';
  42. Zend_Loader::loadClass($rowsetClass);
  43. }
  44. echo $rowsetClass;
  45. return new $rowsetClass($data);
  46. }


I jak widać zwraca utworzony obiekt zmiennej $rowsetClass czyli klasa Zend_Db_Table_Rowset.Która nie zwraca mi nic.Bardzo Proszę mi rozjaśnić o co tu chodzi .Widocznie czegoś tu nie rozumiem.
LBO
Cytat(anonim1989 @ 7.01.2011, 18:58:50 ) *
I jak widać zwraca utworzony obiekt zmiennej $rowsetClass czyli klasa Zend_Db_Table_Rowset.Która nie zwraca mi nic.Bardzo Proszę mi rozjaśnić o co tu chodzi .Widocznie czegoś tu nie rozumiem.


Przecież dałem linki do odpowiedzi?questionmark.gif ITERATORY - wystarczy poczytać.
anonim1989
Przeczytałem .Przyjrze się dokładnie .Dzięki
vermis
Cytat(anonim1989 @ 7.01.2011, 18:58:50 ) *
Zwraca ona obiekt klasy Zend_Db_Table_Rowset,klasy której konstruktor nic nie zwraca.Dlaczego zwraca obiekt?
...
I jak widać zwraca utworzony obiekt zmiennej $rowsetClass czyli klasa Zend_Db_Table_Rowset.Która nie zwraca mi nic.


A od kiedy konstruktor coś zwraca, a tym bardziej klasa?
Jeżeli tworzysz obiekt przez new to otrzymujesz obiekt tej klasy a nie to co zwraca konstruktor. To są podstawy OOP
anonim1989
no tak klasa nie może zwracać .pochrzaniło mi się.

Już kumam o co chodzi.Rzeczywiście chodzi o Itelatory.Dzięki za pomoc i fatyge
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.