Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF] Proste zapytanie
coolin1986
post 18.03.2008, 11:10:17
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


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. ?>


Ten post edytował coolin1986 18.03.2008, 11:13:12


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
LBO
post 18.03.2008, 12:14:22
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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.
Go to the top of the page
+Quote Post
coolin1986
post 18.03.2008, 12:29:04
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


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...

Ten post edytował coolin1986 18.03.2008, 12:29:28


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
LBO
post 18.03.2008, 12:34:57
Post #4





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

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


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. ?>


Ten post edytował LBO 18.03.2008, 12:35:58
Go to the top of the page
+Quote Post
Sabistik
post 18.03.2008, 12:43:40
Post #5


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


W Twoim przypadku jednak lepiej/prościej jest zastosować Zend_Db_Table_Select i przekazać do fetchAll().
Go to the top of the page
+Quote Post
coolin1986
post 18.03.2008, 13:01:50
Post #6





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


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ć

Ten post edytował coolin1986 18.03.2008, 13:02:48


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 18.03.2008, 13:11:58
Post #7


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
coolin1986
post 18.03.2008, 13:21:37
Post #8





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


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


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 18.03.2008, 13:28:49
Post #9


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


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!
Go to the top of the page
+Quote Post
coolin1986
post 13.04.2008, 21:46:56
Post #10





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


Ok, dzięki. Działa. smile.gif

I jeszcze problem: nie wyświetla mi polskich znaków. Czy to trzeba coś w zendzie skonfigurować?


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 13.04.2008, 21:58:46
Post #11


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


Tyle co w przypadku każdego połączenia z db: SET NAMES/CHARACTER
Go to the top of the page
+Quote Post
coolin1986
post 13.04.2008, 22:07:29
Post #12





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


No Sabistik, dla Ciebie to zawsze wszystko proste!
Ale ja nie wiem gdzie to mam wpisać? Czy mam się grzebać w zend library?


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post
Sabistik
post 13.04.2008, 22:25:49
Post #13


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

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


No ale w czym problem? Po zainicjowaniu połączenia:
  1. <?php
  2. $db->query('SET NAMES utf8');
  3. // (...)
  4. ?>
Go to the top of the page
+Quote Post
coolin1986
post 13.04.2008, 22:31:58
Post #14





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 3.03.2008
Skąd: Białoruś

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


Aha no przecież! winksmiley.jpg Taki drobiazg, a cieszę się jak małe dziecko! Działa! Dzięki


--------------------
webdesign hamburg
werbung hamburg
GRAND MEDIA
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.05.2024 - 14:37