Ik ben bezig met het maken van een eigen MVC framework voor PHP. Dit doe ik puur voor het leerproces, niet om te gaan 'concurreren' met al bestaande frameworks, die kwaliteit zal ik toch nooit halen in m'n eentje.
Maar nu loop ik tegen het volgende aan:
Ik heb een aantal menu's en hieronder vallen weer diverse categorieën. Nu wil ik graag met een MySQL query alle menu's ophalen, en dan per menu een apart array (of object) meekrijgen welke de categorieën bevat.
Hieronder een voorbeeld van de database tabellen:
menus
id
name
categories
id
menu_id
name
En hoe ik de data terug wil krijgen:
Momenteel bereik ik dit op de volgende manier:
(Bovenstaande functie fetch_rows haalt de resultaten op uit de database en zet deze in een array, hoe deze verder opgebouwd is lijkt me hier niet van belang..)
Nou werkt dit op zich prima, echter lijkt het me niet zo efficiënt om per menu item een nieuwe SELECT uit te voeren op de categories tabel. Nu denk ik dat het opgelost moet worden door middel van een JOIN, alleen ik weet niet hoe ik deze moet formuleren zodat er per menu item een 'diepere' categories array bij zit.
Heb al flink zitten googelen, maar bij alles wat ik vind wordt alleen uitgelegd hoe een has_many gebruikt kan worden. Ik wil juist weten hoe dit "onder water" werkt en dat wordt nergens duidelijk uitgelegd.
Ik hoop dat het verhaal zo duidelijk!
Maar nu loop ik tegen het volgende aan:
Ik heb een aantal menu's en hieronder vallen weer diverse categorieën. Nu wil ik graag met een MySQL query alle menu's ophalen, en dan per menu een apart array (of object) meekrijgen welke de categorieën bevat.
Hieronder een voorbeeld van de database tabellen:
menus
id
name
categories
id
menu_id
name
En hoe ik de data terug wil krijgen:
code:
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
| [menus] => Array ( [0] => Array ( [id] => 2 [name] => Hoofdmenu [categories] => Array ( [0] => Array ( [id] => 2 [menu_id] => 2 [name] => Hoofdgerechten ) [1] => Array ( [id] => 5 [menu_id] => 2 [name] => Voorgerechten ) ) ) [1] => Array ( [id] => 1 [name] => Kerstmenu [categories] => Array ( [0] => Array ( [id] => 1 [menu_id] => 1 [name] => Dranken ) [1] => Array ( [id] => 3 [menu_id] => 1 [name] => Nagerechten ) ) ) ) |
Momenteel bereik ik dit op de volgende manier:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| $sql = "SELECT * FROM menus ORDER BY name ASC"; $results = $this->db->fetch_rows($sql); $i = 0; foreach ($results as $row) { $categories = $this->db->fetch_rows('SELECT * FROM categories WHERE menu_id = '.$row['id']); $return[$i] = $row; $return[$i]['categories'] = $categories; $i++; } return $return; |
(Bovenstaande functie fetch_rows haalt de resultaten op uit de database en zet deze in een array, hoe deze verder opgebouwd is lijkt me hier niet van belang..)
Nou werkt dit op zich prima, echter lijkt het me niet zo efficiënt om per menu item een nieuwe SELECT uit te voeren op de categories tabel. Nu denk ik dat het opgelost moet worden door middel van een JOIN, alleen ik weet niet hoe ik deze moet formuleren zodat er per menu item een 'diepere' categories array bij zit.
Heb al flink zitten googelen, maar bij alles wat ik vind wordt alleen uitgelegd hoe een has_many gebruikt kan worden. Ik wil juist weten hoe dit "onder water" werkt en dat wordt nergens duidelijk uitgelegd.
Ik hoop dat het verhaal zo duidelijk!