[PHP Zend Framework] FetchAll met typed objects

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online
Is het mogelijk om met een fetchAll een array van typed objects the krijgen (in plaats van een array van arrays of een array van standaardobjecten)

Voor één record kan ik het volgende doen:
PHP:
1
2
3
4
5
6
$users = new Users();
$select = $users -> select();
$select -> from("users", Array('userId', 'username', 'fullname', 'email', 'lastlogin', 'isadmin'));
$stmt = $this -> db -> query($select);
$user = $stmt -> fetchObject("User");
return $user;


Maar ik wil een array van users, niet 1 enkele, dus iets als dit:
PHP:
1
2
$stmt = $this -> db -> query($select);
$user = $stmt -> fetchAll("User");


Ik wil dit omdat ik gebruik maken van classmapping tussen Flex en PHP.

De ZF documentatie geeft wel informatie over een Zend_Db::FETCH_OBJ. Maar ik kan niet vinden hoe ik dit kan specificeren voor een fetchAll of een query die meerdere rijen teruggeeft.

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • Kalentum
  • Registratie: Juni 2004
  • Nu online

Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online
De setFetchMode staat al op object, dus een array van objects lukt wel. Maar ik kan niet uitvinden hoe ik voor een fetchAll de classname kan specificeren. Nu krijg ik een array met stdClass als object. Ik wil een array met 'User' als object.

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je kunt dit doen door de PDOStatement te extenden en daarin de objecten te initialiseren i.c.m. PDO::ATTR_STATEMENT_CLASS, of zelf een IteratorIterator implementatie te maken die de de resultaten van parent::current() in een object wrapt.

Maar het is makkelijker om gebruik te maken van een O/R mapper tool zoals Doctrine of Propel, die als voordeel hebben dat alle gerelateerde objecten die je selecteert ook meteen in de juiste class wrappen.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
Bedoel je niet gewoon....

PHP:
1
2
3
4
<?php 
$stmt = $this -> db -> query($select); 
$user = $stmt -> fetchAll("User")->toArray(); 
?>

Acties:
  • 0 Henk 'm!

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 19-08 08:24

PowerSp00n

There is no spoon

Tsjilp schreef op vrijdag 27 februari 2009 @ 17:09:
De setFetchMode staat al op object, dus een array van objects lukt wel. Maar ik kan niet uitvinden hoe ik voor een fetchAll de classname kan specificeren. Nu krijg ik een array met stdClass als object. Ik wil een array met 'User' als object.
Zend_Db_Table_Abstract:
string $_rowClass
string $_rowsetClass

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

PowerSp00n schreef op zondag 01 maart 2009 @ 17:56:
[...]


Zend_Db_Table_Abstract:
string $_rowClass
string $_rowsetClass
En dan wel eerst je eigen rowClass maken.

Werk je met AMF? Dan kun je je rowClass ook nog een typed object maken zodat je ActionScript objecten kan mappen.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.

Pagina: 1