Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Dlaczego po utworzeniu obiektu Zend_Db_Table_Select zwraca mi zamiast obiektu co innego ?
Forum PHP.pl > Forum > PHP > Frameworki
szypi1989
Sprawdzam klase w Zend_Frameworku. I mam taką metodę w klasie Zend_Db_Table_Abstract o nazwie 'select'.Która ma zawratość :
  1. public function select($withFromPart = self::SELECT_WITHOUT_FROM_PART)
  2. {
  3.  
  4. require_once 'Zend/Db/Table/Select.php';
  5. $select = new Zend_Db_Table_Select($this);
  6. if ($withFromPart == self::SELECT_WITH_FROM_PART) {
  7.  
  8. $select->from($this->info(self::NAME), Zend_Db_Table_Select::SQL_WILDCARD, $this->info(self::SCHEMA));
  9.  
  10.  
  11. }
  12.  
  13. return $select;
  14. }


I zwraca mi taki ciąg znaków " SELECT `album`.* FROM `album` " zamiast obiektu .Sprawdzałem za pomocą instrukcji echo.O co tu chodzi? proszę o pomoc
singles
Zend_Db_Table_Select to praktycznie taki QueryBuilder.

A dlaczego zastosowanie echo zwraca Ci stringa, zamiast obiektu? Zend_Db_Table_Select posiada metodę assemble() (która nadpisuje metodę klasy bazowej - patrz niżej), która "wypluwa" normalne zapytanie SQL.
Zend_Db_Table_Select dziedziczy po Zend_Db_Select, który to posiada implementację magicznej metody __toString():
  1. public function __toString()
  2. {
  3. try {
  4. $sql = $this->assemble();
  5. } catch (Exception $e) {
  6. trigger_error($e->getMessage(), E_USER_WARNING);
  7. $sql = '';
  8. }
  9. return (string)$sql;
  10. }


W momencie, kiedy robisz echo $select, wywoływane jest __toString(), czyli praktycznie assemble().

Chcesz, żeby Ci zrzuciło obiekt, to skorzystaj z var_dump albo print_r albo wbudowanego w Zenda: Zend_Debug::dump() (taki var_dump na sterydach).
anonim1989
No dobra zgadza się.Ale bez użycia echo musi mi przecież zwrócić " SELECT `album`.* FROM `album` " żeby wybrać tabelkę.I sprawdzałem że nie jest używane w trakcie wywoływania fetchAll.A musi przecież dostać ten kawałek zapytania.
zend
Chodzi Ci o przekazanie selecta do fetchAll?
Kod
$db -> fetchAll($select);


Przepatrz też sobie Zend_Db_Adapter_Abstract::fetchAll i Zend_Db_Adapter_Abstract::query, w query wykonywana jest funkcja assemble z selecta
anonim1989
Nie.nie chodzi mi o przekazanie selecta przez fetchAll.Ale o użycie fetchAll w taki sposób:
$album = new Album();
$this->view->albums = $album->fetchAll();
W metodzie fetchAll występuje odwołanie się do metody select():
$select = $this->select();
gdzie potem jest przekazywane do metody _fetch.
$rows = $this->_fetch($select);

A w zmiennej $select jest nazwa klasy Zend_db_table_select

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.