Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Problem z Zend_Db_Table
Forum PHP.pl > Forum > PHP > Frameworki
ska
Witam,

mam bardzo dziwny błąd korzystając z klasy Zend_Db_Table, metody fetchAll()

Mam taki skrypt:

  1. <?php
  2.  
  3. //index.php
  4. Zend_Loader::loadClass( 'Zend_Db' );
  5. Zend_Loader::loadClass( 'Zend_Db_Table' );
  6.  
  7. $dbParams = array (..................);
  8.  
  9. $dbAdapter = Zend_Db::factory( 'PDO_MYSQL', $dbParams );
  10. Zend_Db_Table::setDefaultAdapter( $dbAdapter );
  11.  
  12. ?>
  13.  
  14. <?php
  15.  
  16. //app/admin/models/FormsModel.php
  17.  
  18. class FormsModel extends Zend_Db_Table {
  19.  
  20. protected function _setup() {
  21. $this->_name = 'forms';
  22. $this->_primary = 'id';
  23. parent::_setup();
  24. }
  25.  
  26. }
  27.  
  28. ?>
  29.  
  30.  
  31. <?php
  32.  
  33. //app/admin/controllers/FormsControllers.php
  34.  
  35. class Admin_FormsController extends Zend_Controller_Action {
  36.  
  37. function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $args = array()) {
  38. parent::__construct($request, $response, $args);
  39. try{
  40. Zend_Loader::loadClass( 'FormsModel' );
  41. $db = new FormsModel();
  42. $result = $db->fetchAll();
  43. }
  44. catch (Exception $e){
  45. echo $e;
  46. }
  47. }
  48.  
  49. ?>


Komunikat błędu jaki dostaje:
Fatal error: Class 'Zend_Db_Table_Row_Abstract' not found in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test\library\Zend\Db\Table\Row.php on line 37
(oczywiście klasa ta jest tam zaimplementowana.)

Tabela 'forms' w bazie wraz z danymi również istnieje.

a przed tym komunikat wyświetla jakiś cały plik (oto jego fragment):
  1. ?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Db * @subpackage Table * @copyright Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ /** * Zend_Loader */ require_once 'Zend/Loader.php'; /** * @category Zend * @package Zend_Db * @subpackage Table * @copyright Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ abstract class Zend_Db_Table_Row_Abstract { /** * The data for each column in the row (column_name => value). * * @var array */ protected $_data = array(); /** * This is set to a copy of $_data when the data is fetched from * a database, specified as a new tuple in the constructor, or * when dirty data is posted to the database with save(). * @var array */ protected $_cleanData = array(); /** * Zend_Db_Table parent class or instance. * * @var Zend_Db_Table */ protected $_table = null; /** * Connected is true if we have a reference to a live * Zend_Db_Table_Abstract object. * This is false after the Rowset has been deserialized. * * @var boolean */ protected $_connected = true; /** * Name of the class of the Zend_Db_Table object. * * @var string */ protected $_tableClass = null; /** * Primary row key(s). * * @var array */ protected $_primary; /** * Constructor. * * Supported params for $config are:- * - table = class name or object of type Zend_Db_Table_Abstract * - data = values of columns in this row. * * ...........
  2. etc.......................


Siedze nad tym dwie godziny i nie mogę dojść do rozwiązania.. gdyby ktos pomógł byłbym wdzięczny smile.gif
cyphelf
Ten błąd występuje w wersji Zend Framework 0.9.0. Aby go wyeliminować, zaktualizuj pliki frameworka do wersji 0.9.1.
ska
po napisaniu postu mnie natchnęło i właśnie to zrobiłem.. działa smile.gif

ale i tak dzięki...

-----------EDIT---------------

witam,

nie chciałem zaczynać nowego tematu, bo sprawa także dotyczy Zend_Db_Table, a mianowicie 'poruszaniu się' po obiekcie metody fetchAll().

  1. <?php
  2. $result = $db->fetchAll();
  3. ?>


najwygodniej oczywiście przechodzić przez dane pętlą foreach, no ale robi sie problem, gdy np. buduje sobie drzewo algorytmem iteracyjnym gdzie pętla w pętli będzie zachodzić np. kilkakrotnie. W tym momencie foreach wywołany w innym foreach wykonuje się raz i przerwane zostają wszystkie nadrzedne pętle foreach. Obiektu $result nie mogę przejść petlą for gdyż nie mogę się odwoływać do instancji jak do tablicy...

no i moje pytanie, czy jest jakis sposób na obejście tego smile.gif

z góry dziękuję, pozdrawiam
konys
$db->fetchAll() zwraca obiekt klasy Zend_Db_Table_Rowset, który można przekonwertować do tablicy
  1. <?php
  2. $array = $db->fetchAll()->toArray();
  3. ?>
ska
faktycznie, dziekuję..
milus
Nie chcę zaczynać nowego tematu.
Zastanawiam się czy Zend_Db_Table można nazwać ORM'em ?
Co sądzicie questionmark.gif
murwazy
Cytat(milus @ 12.04.2007, 23:36:55 ) *
Zastanawiam się czy Zend_Db_Table można nazwać ORM'em ?
Co sądzicie ??


niestety nie :(
brakuje mi tego bardzo, nie ma tez tak prostych spraw jak dynamicznie tworzone findery
$user->findByActive(1);
gdzie Active to nazwa kolumny w tabeli uzytkownikow.

w propozycjach sa rozwiazania okolo-ormowe
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.