Orm : dao, activerecord et dblist

Soyez le premier à donner votre avis sur cette source.

Vue 3 933 fois - Téléchargée 436 fois

Description

Une librairie qui gère la couche modèle de mon framework. Elle permet de générer automatiquement mes classes Activerecord (CRUD) et DbList (Wrapper de requêtes retournant des listes).

Source / Exemple :


Quelques exemples d'utilisation

Générer les classes :

	// genere une classe activerecord
	$arGen = new ArGenerator('mytest');
	$arGen->generateAR('personne');
	
	// genere une classe dblist
	$dblGen = new DblGenerator('mytest');
	$dblGen->generateDbl('personne');

Activerecord :

	// --- CREATE
	$ArPersonne = ArPersonne::getInstance();
	$ArPersonne->nom 		= 'Smith';
	$ArPersonne->prenom 	= 'John';
	$ArPersonne->flagEtat 	= 1;
	$ArPersonne->save();
	
	// recupere l'id
	$id_personne = $ArPersonne->id;
	
	// --- READ
	$ArPersonne = ArPersonne::getInstance($id_personne);
	
	// --- READ sur un autre champ que l'id
	$ArPersonne = ArPersonne::getInstance(array('nom' => 'Smith'), false);
	
	// --- UPDATE
	$ArPersonne->prenom = 'Jack';
	$ArPersonne->save();
	
	// --- DESTROY
	$ArPersonne->delete();
	
DbList

	// tous les elements
	$DblPersonne = DblPersonne::getInstance(DblPersonne::TYPE_EXAMPLE);
	foreach($DblPersonne as $personne){
		echo '<br> personnes : ';
		print_r($personne);
	}
	
Dao

	$db = DbFactory::getDb('mytest');
	$query = 'select * from personne where id > '.$db->formate(4,Dao::TYPE_INT).' order by nom limit 10';
	$nbLine = $db->execute($query);
	
	if($nbLine){
		while($line = $db->getLine()){
			echo '<br> personnes : ';
			print_r($line);
		}
	}

Conclusion :


Si des personnes veulent tester, s'en inspirer ou adapter les classes à d'autres Sgbd n'hésitez pas à me faire vos retours.
Merci d'avance.

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Reldan
Messages postés
14
Date d'inscription
mercredi 27 octobre 2010
Statut
Membre
Dernière intervention
27 mai 2013

à 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;
}
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.