Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pytanie o DB_DAtaObject
Forum PHP.pl > Forum > PHP > Object-oriented programming
acztery
witam,

Od dawna stosuje DB_DataObject i mam pierwszy raz kłopot z tym "cudem"

Mam taki kod:

  1. <?php
  2. include_once 'Lang.class.php';
  3. require_once 'DB/DataObject.php';
  4. final class Doc extends DB_DataObject {
  5.  
  6. public $DataObject2;
  7.  
  8. public  function __construct()
  9. {
  10. $this->DataObject2 =  DB_DataObject::factory('documents');
  11. }
  12.  
  13.  
  14.  public function &lstDocuments($_where='',$_lang, $_limit='',$_order='')
  15. {
  16. if ($_limit <> '') {
  17. $this->DataObject2->Limit($_limit);
  18. }
  19. // Find element in table documents
  20. $this->DataObject2->find();
  21. while($this->DataObject2->fetch()) {
  22. $result['data'][] = $this->DataObject2->toArray();
  23. }
  24. return $result = isset($result) ? $result : null;
  25. }
  26. }
  27. ?>


i działa ( działa tylko 1 raz ) tzn:

  1. <?php
  2. $DocClass = new Doc();
  3.  
  4.  
  5. $smarty->assign('news',$DocClass->lstDocuments('Nowosci','pl',7,'time DESC')); // dziala 
  6. $smarty->assign('promo',$DocClass->lstDocuments('Promocje','pl',2,'time DESC')); // nie dziala 
  7. $smarty->assign('news2',$DocClass->lstDocuments('Nowosci','pl',1,'time DESC')); // nie dziala 
  8. $smarty->assign('prod',$DocClass->lstDocuments('Produkty','pl',3,'time DESC')); // nie dziala
  9. ?>


Moze ktos mi powie co mam nie tak przeciez klasa jest napisana dobrze.

Pamietaj ze zapytanie generuje dobrze do pokazuje dobrze 7 nowosci ( news ) w smarty.

jak to

$this->DataObject2 = DB_DataObject::factory('documents');

przeniose do metody lstDocuments to dziala..
LBO
A gdzie używasz argumentu $where w metodzie Doc::lstDocuments()?
edit:
Aaaah, przyciąłeś klasę.


Mało kodu.

edit:
Hmmm, a po co klasa Doc dziedziczy po klasie DB_DataObject? Wydaje mi się to niepotrzebne, ponieważ używasz tego obiektu wewnątrz klasy.
acztery
kod jest ucięty ale to nie ma znaczenia

nie chciałem wklejać całości o to chyba nie ma znaczenia. a argumentu urzywam tak.
  1. <?php
  2. ....
  3.  
  4. if ($_where <> '') {
  5. $this->DataObject2->whereAdd("Cat = '$_where'");
  6. }
  7. ...
  8. ?>


i tak analogicznie z $_order i $_lang. ale nawet z tym nie działa, mi sie wydaje ze to wina samej klasy DB_DataObject
LBO
Zdebuguj kod, dodaj jakieś opisy wykonywanych akcji etc. Czy DB_DatabObject posiada metodę toSQL? Możesz podejrzeć wygenerowane zapytanie?
acztery
debug daje coś takiego:

tblDocuments: FETCH: Last Data Fetch'ed after 0.0035898685455322 seconds
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: 0: fetched on object after fetch completed (no results found)
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: 0: fetched on object after fetch completed (no results found)
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: ERROR: You cannot do two queries on the same object (copy it before finding)
tblDocuments: 0: fetched on object after fetch completed (no results found)

reszta zapytan pobiera dane prawidłowo. przy tym co dalem zapytanie jest takie

SELECT * FROM `documents` LIMIT 0, 7
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.