Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Zend_DB_Table a JOIN i SELECT
Forum PHP.pl > Forum > PHP > Frameworki
G3LO
Witam,

próbuję zrealizować za pomocą Zend_DB_Table następujące zapytanie:
  1. SELECT (jakies dane) FROM tab1 T1 JOIN tab2 T2 ON T1.id = T2.fk1

na framework.zend nic nie zostało na ten temat napisane, w API nie mogę znaleźć żadnej metody którą bym podejrzeał
o łączenie tabel.
rowiązanie
  1. <?php
  2. $items = $tab1->fetchAll ();
  3. foreach ($items as $item)
  4. {
  5. $dep_rows = $tab1->getDepandantRowset ();
  6. ..i zapisz gdzies
  7. }
  8. ?>

nie chcę bo do bazy poleci 50+ zapytań podczas gdy wystarczy 1

drugą kwestią która mnie ciekawi to rzutowanie w zapytaniach za pomocą Zend_DB_Table:
jak zrobić np.
  1. SELECT numer FROM samochody
?
fetch robi zawsze SELECT * - co czasem nie jest za bardzo porządane

prosiłbym uprzejmie o informacje o rozwiązaniach powyższych problemach jeśli ktoś takowe posiada.
Sabistik
Nie wiem po co piszesz tu jak na zend-framework.pl dostałeś już poprawną odpowiedź..
wolditm
Ostatnio też się bawie Zend_Db, co do joinów to na tym etapie myśle nie pozostaje nic innego jak w danym modelu dopisanie nowej metody np.
  1. <?php
  2. function getArticlesByCo&#347;( $id )
  3. {
  4. $select = $this->getAdapter()->select();
  5. $select->from()->join()
  6. // itd
  7. }
  8. ?>

Co do drugiego problemu to ja zrobiłem coś takiego w Zend_Db_Table:
  1. <?php
  2. function setFieldsToFetch( $fields )
  3. {
  4. $this->_cols = $fields;
  5. return $this;
  6. }
  7. // później robisz
  8. $model->setFieldsToFetch( array( 'id', 'title', 'cos tam jeszcze' )->fetchAll();
  9. ?>

Powyższe rozwiazanie nie jest idealne, ale działa.
G3LO
Cytat(Sabistik @ 13.08.2007, 12:05:33 ) *
Nie wiem po co piszesz tu jak na zend-framework.pl dostałeś już poprawną odpowiedź..


Poprawność tamtej odpowiedzi jest za mało poprawna winksmiley.jpg
pytam o to czy się da zrobić to za pomocą Zend_DB_Table jeszcze raz podkreślam
kosmowariat
korzystasz z obiektu Zend_Db_Select (w manualu opisanych jest kilka metod jak go dostać) Zajmijmy się teraz Twoim zapytaniem
  1. SELECT (jakies dane) FROM tab1 T1 JOIN tab2 T2 ON T1.id = T2.fk1

Zakładam że masz już obiekt $select który jest instancją w/w klasy

  1. <?php
  2. $select->from(array('T1'=> 'tab1',array('nazwy_kolumn'));
  3. //nakładasz alias 'T1' na tebele 'tab1' - przekazujesz jako tablicę nazwy kolumn - jeśli przekażesz pustą tablicę
  4. //to nie pobierze żadnej kolumny (przydaje się przy joinach), jeśli chcesz nałożyć aliasy na kolumny to tablicę z nazwami kolumn deklar
    ujesz jako tablicę asocjacyjną gdzie klucz to alias kolumny a wartość to jej fakt
    yczna nazwa array('alias' => 'kolumna')
  5.  
  6. $select->join(array('T2' => 'tab2'), 'T1.id = T2.fk1', array('nazwy_kolumn'));
  7. //pierwsza wartość analogicznie jak przy klauzuli from druga to jest jakby definic
    ja ON trzecia tablica analogicznie jak 2 parametr przy FROM
  8.  
  9. $select->__toString();
  10. //pokaże utworzony sql
  11.  
  12. //no i wykonujesz zapytanie
  13. ?>


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