Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zend baza danych join
Forum PHP.pl > Forum > Przedszkole
cykcykacz
Witam,
mam dwie tabele:
articles:
i_id,
i_name,
i_text

druga tabela:
users
id,
username,
password,
first_name,
last_name,
role

Robięto w ten sposób:
Model:
  1. <?php
  2. class Model_Select extends Zend_Db_Table_Abstract
  3. {
  4. protected $_name = 'articles';
  5. protected $_primary = 'i_id';
  6.  
  7. public function join()
  8. {
  9. $select = $this->select()
  10. ->from(array('a' => 'articles'),
  11. array('i_id','i_name'))
  12. ->join(array('u' => 'users'),
  13. 'a.i_id = u.id',
  14. array('username') );
  15.  
  16. return $this->fetchAll($select);
  17. }
  18.  
  19.  
  20. }

kotroler
  1. public function joinAction()
  2. {
  3. // action body
  4. $modelselect = new Model_Select();
  5. //$modelselect->setIntegrityCheck(false);
  6. $this->view->select = $modelselect->join();
  7. }

widok
Kod
    <?php foreach($this->select as $row): ?>
            <table class="table1">
        <tr><td colspan="2" class="title"><strong class="red">ID:</strong><?php echo $row->i_id ?></td></tr>
            <tr><td><strong class="blue">Tytuł:</strong></td><td><?php echo $row->i_name ?></td></tr>
    </table>
    <?php endforeach ?>


Dostaję taki komunikat błędu:
Kod
Exception information:

Message: Select query cannot join with another table
skowron-line
  1. echo $select;
w modelu.
A tak na marginesie to nie nadpisujesz metody join questionmark.gif
cykcykacz
Hm... nie raczej nie nadpisuje? A którą miał bym nadpisywać?

Znalazłem rozwiązanie oczywiście już kiedyś z tym miałem problem:
  1. $select->setIntegrityCheck(false);


Pozdrawiam
piotrooo89
Cytat(cykcykacz @ 16.01.2012, 20:08:46 ) *
Hm... nie raczej nie nadpisuje? A którą miał bym nadpisywać?


moim zdaniem nadpisuje, tylko jeszcze podczas wykonywania metody join masz poprawny obiekt, po tej metodzie jeśli będziesz chciał wywołać tą metodę możesz mieć "kwiatki".
cykcykacz
To gdzie jest ta metoda którą nadpisuję?
Nie ogarniam?
piotrooo89
klasa która rozszerzasz Zend_Db_Table_Abstract ma metodę join, a Ty w swojej klasie Model_Select nadpisujesz jej deklaracje swoją własną.
cykcykacz
Pewnie się mylę oneeyedsmiley02.png przeglądnołem klasę Zend_db_table_abstract i nie znalazłem tam metody join...
Prawda?
piotrooo89
wybacz ja Ci "za bredziłem"... to nie klasa Zend_Db_Table_Abstract tylko klasa Zend_Db_Table_Select posiada metodę join, a Twoje wywołanie:

  1. $select = $this->select()


powoduje powołania do życia obiektu tej klasy i używaniu jej metod.
cykcykacz
Faktycznie nadpisuję rolleyes.gif .
Teraz pytanie czy robię to poprawnie czy może coś zmienić ulepszyć?
piotrooo89
nie robisz tego poprawnie, bo uniemożliwiasz sobie w późniejszych elementach kodu dostępu do poprawnej metody join.
ulepszyć można zmieniając nazwę Twojej metody.
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.