Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zend// Zapytanie left join, paginacja.
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 taki kod paginacji:
  1. $ankietyModel = new Admin_Ankiety();
  2. $select = $ankietyModel->select();
  3. $select->order('id DESC');
  4.  
  5. $paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select));
  6. $paginator->setItemCountPerPage('10')
  7. ->setCurrentPageNumber($this->_getParam('page', 1));
  8.  
  9. $this->view->paginator = $paginator;

Wyświetla mi ładnie listę id.

Nie wiem jak dodać zapytanie:

  1. SELECT ankiety.id, user.use_name, user.use_email
  2. FROM ankiety
  3. LEFT JOIN user ON ankiety.use_id = user.use_id
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Podałeś za mało danych:
- do czego dodać
- co chcesz osiągnąć

opisz wszystko dokładnie a wtedy pomyślimy nad rozwiązaniem

Ten post edytował CuteOne 14.08.2011, 00:34:14
Go to the top of the page
+Quote Post
negusik
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 1
Dołączył: 30.01.2010

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


1. Czemu twój model ma nazwę klasy "Admin_Ankiety" a nie "Admin_Model_Ankiety" ? Oczywiście jeśli Admin_ to namespace modułu admin.

Może dodaj do modelu funkcje - będzie łatwiej i ładniej:
Kod
    public function pobierzAnkiety() {
        $select = $this->getAdapter()->select();
        $select->from($this->_name, array($this->_name . '.id'))
                ->order($this->_name . '.id DESC');
                ->joinLeft('user', $this->_name . '.use_id = user.use_id', array('user.use_name', 'user.use_email'));

        $query = $this->getAdapter()->query($select);
        $query->setFetchMode(Zend_Db::FETCH_OBJ);

        return $query->fetchAll();
    }


Oczywiście
Kod
$this->_name = 'ankiety'


I teraz coś takiego
Zamiast:
Kod
$select = $ankietyModel->select();
        $select->order('id DESC');


Kod
$select = $ankietyModel->pobierzAnkiety();


[/code]
Go to the top of the page
+Quote Post
cykcykacz
post
Post #4





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

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


negusik dostaję komunikat:
Kod
Catchable fatal error: Argument 1 passed to Zend_Paginator_Adapter_DbSelect::__construct() must be an instance of Zend_Db_Select,

Go to the top of the page
+Quote Post
CuteOne
post
Post #5





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


W błędzie masz odpowiedź na swoje pytanie (IMG:style_emoticons/default/smile.gif) zobacz do dokumentacji Zend_Db_Select i zrób to co zaproponował negusik(zapewne będą jakieś drobne różnice) tyle, że po stronie modelu
Go to the top of the page
+Quote Post
cykcykacz
post
Post #6





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

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


Doszedłem do tego jaki miałem banalny problem:
  1. $ankietyModel = new Admin_Ankiety();
  2. $select = $ankietyModel->select();
  3. $select->setIntegrityCheck(false);
  4. $select->from(array('a' => 'ankiety'),
  5. array('id'))
  6. ->order('id DESC')
  7. ->joinleft(array('u' => 'user'),
  8. 'a.use_id = u.use_id',
  9. array('use_name','use_email') );
  10.  

Skorzystałem z metodty __toString();
  1. echo $select->__toString();


Wyświetliło mi zapytanie, które przetestowałem w phpmyadmin i dostałem żądany wynik.
Myślę sobie o co chodzi przecież wszystko git jest:) oczywiście w widoku miałem tylko wyświetlanie id:
  1. <?php
  2. foreach($this->paginator as $test) {
  3. echo $test['id'] .' </br> ';
  4. }
  5. ?>

Dodałem jeszcze use_name i use_email i git:
  1. <?php
  2. foreach($this->paginator as $test) {
  3. echo $test['id'] .$test['use_name']. $test['use_email'].' </br> ';
  4. }
  5. ?>


Dzięki wam za pomoc.
Pozdrawiam

Ten post edytował cykcykacz 14.08.2011, 18:29:02
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: 23.08.2025 - 20:38