Bonjour à tous,
Je suis en train de développer un site MVC et POO, et je rencontre un soucis pour créer une requête préparée SELECT assez complexe.
Cette requête doit se charger de la sélection des différents item d'un menu et d'un sous menu de ce type:
cliquer sur "dropdown" et le sous menu s'affiche/
Voici donc la base de données, et la requête que j'ai réalisé pour sélectionner les données.
Le champ POST_ID est une clé étrangère, qui référence le champ id de la table posts.
sqlfiddle de la table
Le soucis, c'est que je n'arrive pas à créer ma requête préparée, elle est trop complexe.
Dans la logique que j'ai mis en place pour mon MVC, c'est le fichier Model.php qui gère les requêtes SQL.
Voici comment je conçois une requête SELECT, via une fonction find:
(Notez que le nom de la table est récupéré de manière automatique, j'ai pas de soucis à ce niveau.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 public function find($req = array()){ $sql = 'SELECT '; if(isset($req['fields'])){ if(is_array($req['fields'])){ $sql .= implode(', ',$req['fields']); }else{ $sql .= $req['fields']; } }else{ $sql.='*'; } $sql .= ' FROM '.$this->table.' as '.get_class($this).' '; // Liaison if(isset($req['join'])){ foreach($req['join'] as $k=>$v){ $sql .= 'LEFT JOIN '.$k.' ON '.$v.' '; } } // Construction de la condition if(isset($req['conditions'])){ $sql .= 'WHERE '; if(!is_array($req['conditions'])){ $sql .= $req['conditions']; }else{ $cond = array(); foreach($req['conditions'] as $k=>$v){ if(!is_numeric($v)){ $v = '"'.mysql_real_escape_string($v).'"'; } $cond[] = "$k=$v"; } $sql .= implode(' AND ',$cond); } } if(isset($req['order'])){ $sql .= ' ORDER BY '.$req['order']; } if(isset($req['limit'])){ $sql .= ' LIMIT '.$req['limit']; } $pre = $this->db->prepare($sql); $pre->execute(); return $pre->fetchAll(PDO::FETCH_OBJ); }
Ensuite, dans le controller qui gère mes pages (PagesController.php), j'ai ceci pour afficher mes pages:
Je dois donc créer, sur cette même base puisque ma structure est ainsi faite, une fonction dans mon Model, pour créer ma requête SQL vue dans le sqlfiddle que j'ai posté, et créer ensuite dans PagesController.php, une fonction qui rendrait mon menu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 function view($id){ $this->loadModel('Post'); $d['page'] = $this->Post->findFirst(array( 'conditions' => array('online' => 1,'id'=>$id,'type'=>'page'), 'fields' => 'Post.id,Post.name,Post.title,Post.slug,Post.content', )); if(empty($d['page'])){ $this->e404('Page introuvable'); } $this->set($d); }
Voilà, j'espère avoir été suffisamment claire dans ce que je souhaite réaliser, toute aide est la bienvenue.
D'avance merci!
Partager