Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework]Dlaczego po utworzeniu obiektu Zend_Db_Table_Select zwraca mi zamiast obiektu co innego ?
szypi1989
post 8.01.2011, 22:09:11
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 0
Dołączył: 7.09.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
singles
post 8.01.2011, 22:45:37
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 26
Dołączył: 2.07.2007

Ostrzeżenie: (0%)
-----


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).


--------------------
Works for me => u mnie działa - blog o (o)programowaniu i nie tylko
meet.php - darmowe meetupy związane z PHP
Go to the top of the page
+Quote Post
anonim1989
post 9.01.2011, 11:22:35
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.01.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
zend
post 9.01.2011, 19:23:04
Post #4





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
anonim1989
post 10.01.2011, 20:38:27
Post #5





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.01.2011

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.06.2025 - 07:37