Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zend baza danych join
cykcykacz
post
Post #1





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. echo $select;
w modelu.
A tak na marginesie to nie nadpisujesz metody join (IMG:style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
cykcykacz
post
Post #3





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

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


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
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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".
Go to the top of the page
+Quote Post
cykcykacz
post
Post #5





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

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


To gdzie jest ta metoda którą nadpisuję?
Nie ogarniam?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




klasa która rozszerzasz Zend_Db_Table_Abstract ma metodę join, a Ty w swojej klasie Model_Select nadpisujesz jej deklaracje swoją własną.
Go to the top of the page
+Quote Post
cykcykacz
post
Post #7





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

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


Pewnie się mylę (IMG:style_emoticons/default/oneeyedsmiley02.png) przeglądnołem klasę Zend_db_table_abstract i nie znalazłem tam metody join...
Prawda?

Ten post edytował cykcykacz 16.01.2012, 21:05:15
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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.
Go to the top of the page
+Quote Post
cykcykacz
post
Post #9





Grupa: Zarejestrowani
Postów: 550
Pomógł: 9
Dołączył: 29.05.2009
Skąd: Ostrów Wielkopolski

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


Faktycznie nadpisuję (IMG:style_emoticons/default/rolleyes.gif) .
Teraz pytanie czy robię to poprawnie czy może coś zmienić ulepszyć?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 4.10.2025 - 21:05