ORM : DAO, ACTIVERECORD ET DBLIST

Reldan Messages postés 14 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 27 mai 2013 - 13 avril 2012 à 18:11
Reldan Messages postés 14 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 27 mai 2013 - 13 avril 2012 à 18:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54214-orm-dao-activerecord-et-dblist

Reldan Messages postés 14 Date d'inscription mercredi 27 octobre 2010 Statut Membre Dernière intervention 27 mai 2013
13 avril 2012 à 18:11
à modifier:
Dblist doit implémenter Countable en plus de Iterator (c'est quand même pratique)

on ajoute donc une methode count() et une methode exec() qui factorise le code issu de rewind() :

public function count() {
$this->exec();
return $this->nbTotal;
}

public function rewind() {
$this->exec();
$this->position = 0;
}

protected function exec() {

// genere l'id courant
$this->idList = $this->getListId();

// test si la requete est deja lance
if(!isset($this->lists[$this->idList])){

// instanciation dao
if(!isset($this->dao)) $this->dao = DbFactory::getDb($this->dbName);

// lance la requete
$query = $this->getQuery();
if($this->debug) echo __METHOD__.' ('.__LINE__.') requete : '.$query;

$this->nbTotal = $this->dao->execute($query, $this->page, $this->nbPerPage);
if($this->nbTotal){
$this->lists[$this->idList] = $this->dao->getArray();

if($this->page && $this->nbPerPage && ($this->nbTotal > $this->nbPerPage)){
$this->nbPage = ceil($this->nbTotal / $this->nbPerPage);
}
}
// enregistre l'instance de classe
self::$instance[$this->className] = $this;
}
}
Rejoignez-nous