Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Proste zapytanie
Forum PHP.pl > Forum > PHP > Frameworki
coolin1986
Mam taki skrypcik. Chciał bym zrobic prostego selecta. Zrobiłem selekta (jest właśnie zakomentowany), jak probuje uruchomić wywala mi tysiąc błedów, bez tego selecta wszystko działa. Proszę o pomoc

myprojekt/application/controllers/IndexController.php:

  1. <?php
  2. class IndexController extends Zend_Controller_Action {
  3.  function init() {
  4. $this->view->baseUrl = $this->_request->getBaseUrl();
  5. Zend_Loader::loadClass('Oferty');
  6.  }
  7.  function indexAction() {
  8.  
  9. $offer = new Oferty();
  10.  $result = $offer->fetchAll();
  11.  $this->view->offers = $result;
  12.  
  13. //  $sql = 'SELECT * FROM ns_offer';
  14. //  $result = $offer->fetchAll($sql);
  15. }
  16. ?>


myprojekt/application/models/Oferty.php :

  1. <?php
  2. class Oferty extends Zend_Db_Table {
  3.  protected $_name = 'ns_offer';
  4. }
  5. ?>


myproject/index.php :

  1. <?php
  2. error_reporting(E_ALL|E_STRICT);
  3. date_default_timezone_set('Europe/London');
  4. set_include_path('.' . PATH_SEPARATOR . './library'
  5.  . PATH_SEPARATOR . './application/models/'
  6.  . PATH_SEPARATOR . get_include_path());
  7.  
  8. include "Zend/Loader.php";
  9. Zend_Loader::loadClass('Zend_Controller_Front');
  10. Zend_Loader::loadClass('Zend_Config_Ini');
  11. Zend_Loader::loadClass('Zend_Registry');
  12. Zend_Loader::loadClass('Zend_Db');
  13. Zend_Loader::loadClass('Zend_Db_Table'); 
  14.  
  15.  
  16. // load configuration
  17. $config = new Zend_Config_Ini('./application/config.ini', 'general');
  18. $registry = Zend_Registry::getInstance();
  19. $registry->set('config', $config); 
  20.  
  21. // setup database 
  22. $db = Zend_Db::factory( $config->db->adapter,
  23. $config->db->config->toArray() );
  24. Zend_Db_Table::setDefaultAdapter($db);
  25.  
  26.  
  27.  
  28. // setup controller
  29. $frontController = Zend_Controller_Front::getInstance();
  30. $frontController->throwExceptions(true);
  31. $frontController->setControllerDirectory('./application/controllers');
  32.  
  33. // run!
  34. $frontController->dispatch();
  35. ?>
LBO
Zend_Db_Table::fetchAll() nie przyjmuje jako argumentu pełnego SELECTa, tylko część zawężajacą (WHERE).

Jeżeli chce wykonać pełne zapytanie, radzę pobrać adapter bazy poprzez Zend_Db_Table::getAdapter(), a następnie
Zend_Db_Adapter_Abbstract::query().

Pozdrawiam.
coolin1986
Czyli:

w index.php
  1. <?php
  2. // setup database 
  3. $db = Zend_Db::factory( $config->db->adapter,
  4. $config->db->config->toArray() );
  5. Zend_Db_Table::getAdapter($db);
  6. ?>


a w modelu:

  1. <?php
  2. class Oferty extends Zend_Db_Table_Abstract {
  3.  protected $_name = 'ns_offer';
  4. }
  5. ?>


?
Teraz zupełnie się zaplątełem...
LBO
nie

  1. <?php
  2. class IndexController extends Zend_Controller_Action {
  3.  function init() {
  4. $this->view->baseUrl = $this->_request->getBaseUrl();
  5. Zend_Loader::loadClass('Oferty');
  6.  }
  7.  
  8.  function indexAction() {
  9. $offer = new Oferty();
  10.   $result = $offer->fetchAll();
  11.   $this->view->offers = $result;
  12.  
  13.   $adapter = $offer->getAdapter();
  14.   $result = $adapter->query('SELECT * FROM ns_offer'); // To będzie działać.
  15.  }
  16. }
  17. ?>
Sabistik
W Twoim przypadku jednak lepiej/prościej jest zastosować Zend_Db_Table_Select i przekazać do fetchAll().
coolin1986
zastosowałem getAdapter() i rzeczywiście błedu nie ma. Ale ta funkcja nic mi nie zwraca.

A co do Zend_Db_Table_Select mam coś takiego:

Fatal error: Class 'Zend_Db_Table_Select' not found in C:\wamp\www\myproject\application\models\Oferty.php on line 2

Po prostu chodzi mi o to żeby pisać gołe zapytania sql z minimalnym wykorzystaniem możliwości objektowych zend_db. Potrzebuję w krutkim czasie przenieść swój cms na zenda bez modyfikacji zapytań sql, bo to zajęło by strasznie dużo czasu... a cms ma już działać
Sabistik
Widzę że nie masz zastosowanego autoloadera. Jak jej nie wczytałeś co co sie dziwisz. Poza tym do obiektu selecta możesz się dostać poprzez $offer->select(); Nie wspominając już o tym że to wszystko jest prosto opisane w manualu: http://framework.zend.com/manual/en/zend.db.html

No to po co w ogóle ruszasz Zend_Db_Table ? Twórz połączenie poprzez $db = Zend_Db::factory($config->db); i załaduj obiekt do rejestru i z niego korzystaj.

Jak chcesz wyniki zamiast query() zastosuj fetchAll() ofc.
coolin1986
Cytat(Sabistik @ 18.03.2008, 13:11:58 ) *
No to po co w ogóle ruszasz Zend_Db_Table ? Twórz połączenie poprzez $db = Zend_Db::factory($config->db); i załaduj obiekt do rejestru i z niego korzystaj.


Załamka... :/ pierwszy raz mam z zendem do czynienia i nie do końca rozumiem jak to mam zrobić... jak bym miał jakiś przykład...

Cytat(Sabistik @ 18.03.2008, 13:11:58 ) *
Jak chcesz wyniki zamiast query() zastosuj fetchAll() ofc.


własnie tak wcześniej robiłem smile.gif ale wolę na razie zwykłe zapytania
Sabistik
Cytat
własnie tak wcześniej robiłem ale wolę na razie zwykłe zapytania

Nie. Wcześniej wywoływałeś poprzez Zend_Db_Table, a ja mówię o korzystaniu prosto z adaptera.

  1. <?php
  2. $db = Zend_Db::factory( $config->db->adapter,
  3. $config->db->config->toArray() );
  4. Zend_Registry::set('db', $db);
  5. ?>

i w kontrolerze
  1. <?php
  2. $results = Zend_Registry::get('db')->fetchAll('select * from tabela');
  3. Zend_Debug::dump($results);
  4. ?>


I zajrzyj w końcu do tego manuala!
coolin1986
Ok, dzięki. Działa. smile.gif

I jeszcze problem: nie wyświetla mi polskich znaków. Czy to trzeba coś w zendzie skonfigurować?
Sabistik
Tyle co w przypadku każdego połączenia z db: SET NAMES/CHARACTER
coolin1986
No Sabistik, dla Ciebie to zawsze wszystko proste!
Ale ja nie wiem gdzie to mam wpisać? Czy mam się grzebać w zend library?
Sabistik
No ale w czym problem? Po zainicjowaniu połączenia:
  1. <?php
  2. $db->query('SET NAMES utf8');
  3. // (...)
  4. ?>
coolin1986
Aha no przecież! winksmiley.jpg Taki drobiazg, a cieszę się jak małe dziecko! Działa! Dzięki
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.