Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zend// Zapytanie left join, paginacja.
Forum PHP.pl > Forum > Przedszkole
cykcykacz
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
CuteOne
Podałeś za mało danych:
- do czego dodać
- co chcesz osiągnąć

opisz wszystko dokładnie a wtedy pomyślimy nad rozwiązaniem
negusik
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]
cykcykacz
negusik dostaję komunikat:
Kod
Catchable fatal error: Argument 1 passed to Zend_Paginator_Adapter_DbSelect::__construct() must be an instance of Zend_Db_Select,

CuteOne
W błędzie masz odpowiedź na swoje pytanie 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
cykcykacz
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
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.