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
