FonfonBlog, CMS Blog - version 1.0 Alpha

Eléphant du PHP | 383 Messages

28 janv. 2011, 11:17

J'ai commencé à mettre en place une couche model pour gerer les requetes SQL (mise sur le SVN) mais c'est loin d'être simple et je ne sais pas trop ou je vais...Je crois que la classe que j'ai choppé n'est pas tres adapté à mon cas.
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

Eléphant du PHP | 383 Messages

01 févr. 2011, 12:23

Je viens de commencer à développer une méthode de type "SELECT" sur la classe Model :
Prenons pour exemple le cas de la classe Article, et plus particulierement la méthode affichArticle().

La méthode contiendrait un tableau de type :
$dataJoin = array('User' => array(
				'joinTable' => PFX . 'users',
				'joinChamp' => 'id_user', //Champ de la table etrangere
				'foreignKey' => 'id_user', //Champ de notre table sur lequel on fait la clé etrangere
				'typeJoin' => 'LEFT'
		),
		'RTypeTheme' => array(
				'joinTable' => PFX . 'r_type_themes',
				'joinChamp' => 'code_theme', //Champ de la table etrangere
				'foreignKey' => 'id_theme', //Champ de notre table sur lequel on fait la clé etrangere
				'typeJoin' => 'LEFT'
		),
		'Commentaire' => array(
				'joinTable' => PFX . 'commentaires',
				'joinChamp' => 'id_article', //Champ de la table etrangere
				'foreignKey' => 'id_article', //Champ de notre table sur lequel on fait la clé etrangere
				'typeJoin' => 'LEFT'
				)
	)
Afin de faire les liens avec les jointures
et la methodes appelerait la fonction comme ça :
function affichArticle(){
$dataJoin  = array(...);
$this->accessBD->select( $this->accessBD->__getTable(), $dataJoin , a.id_article = ".$this->__getIdArticle() );
}
Et dans la classe Model, voila la tête de la fonction Select :
	public function select($table_name, $condition = null, $dataJoin = array()){
		
		$sql = "SELECT ";
		
		$deminutifTable = substr($table_name, 0,3);
		$liste_champs = $this->getFieldsName($table_name);
		
		foreach ($liste_champs as $fields) {
			$field = fields[];
			sql .= "$deminutifTable.$field, "
		}
		if (dataJoin) {
			foreach ($dataJoin as $model=>$tabModel) {
				$deminutifTable = substr($tabModel['joinTable'], 0,3);
				$liste_champs_join = $this->getFieldsName($tabModel['joinTable']);
				sql .= "$deminutifTable.$field, "
			}
		}		
		
		$sql = substr($sql, 0,strlen($sql)-1); 
		$sql .= "FROM $table_name";
		
		if (dataJoin) {		
			foreach ($dataJoin as $model=>$tabModel) {
				$diminutifTableJoin = substr($tabModel['joinTable'], 0,3)
				$sql .= $tabModel['typeJoin'] . " JOIN " .  $tabModel['joinTable'] . " " . diminutifTableJoin;
				$sql .= " ON " . diminutifTableJoin . "." . $tabModel['joinChamp'] . "=" . $deminutifTable.".".$tabModel['foreignKey'];
			}
		}	
		
		if( isset($condition) ) {
			$sql .= " WHERE $condition";
		}

		/**@TODO :  A COMPLETER : **/
		$this->result = $this->accessBD->prepare($sql);
		$this->accessBD->query($this->result);
		
	}
Ce n'est qu'une ébauche, je viens de coder ça à la va-vite et sans tester :)
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre

ViPHP
AB
ViPHP | 5818 Messages

01 févr. 2011, 21:39

J'ai pensé à ton projet il y a pas longtemps en répondant à un topic. Si cela (htmlentites en bdd) n'a pas été corrigé depuis que nous en avons parlé, voilà le genre de question que tu pourrais avoir...

Eléphant du PHP | 383 Messages

01 févr. 2011, 22:09

J'ai pensé à ton projet il y a pas longtemps en répondant à un topic. Si cela (htmlentites en bdd) n'a pas été corrigé depuis que nous en avons parlé, voilà le genre de question que tu pourrais avoir...
La recherche se fait (ou va se faire...je ne sais plus si je l'ai fais) via les tags, qui ne sont pas codés en html :).
Mais j'ai vu un soucis qui posait pour l enregistrement en html...donc je reviendrais peut-être sur cette décision ultérieurement ;)
----------------------------------------------------------------------------------
www.april.org - Promouvoir et défendre le logiciel libre