Ik ben sinds kort begonnen met het opzetten van een nieuwe website om tweedehands wagens weer te geven. Met dit project wil ik meteen afstappen van de klassieke manier van programmeren waar ik reeds wat jaren ervaring in heb en eindelijk overstappen naar OOP in PHP.
Omdat ik (buiten wat theoretische lessen en wat 'hello world' applicaties in java) zeer weinig kennis heb van het OO gebeuren heb ik besloten om een framework te gebruiken om toch ergens een houvast te hebben. Zend leek me boeiend en perfect wat ik zocht.
Na een aantal tutorials doorgenomen betreffende het Zend-framework ben ik dan ook begonnen aan het opzetten van de site. Het basisopzet van het framework begrijp ik en hiermee slaag ik ook wat basisgegevens weer te laten geven.
Nu ben ik echter aangekomen bij het weergeven van data uit meerdere tabellen en loop ik vast in de denkwijze die Zend gebruikt.
Om het probleem te schetsen eerst wat beknopte info over mijn project:
*tblWagen*
PK wagen_ID
wagen_merk (integer)
wagen_type (varchar)
wagen_versie (varchar)
etc...
*tblMerk*
PK merk_ID
merk_omschrijving
Het is echter de bedoeling dat die 1 achter de nummering vervangen wordt door het merk (Renault in dit geval). Ik heb al verschillende zaken geprobeerd (oa. door helper toe te voegen aan het model van tblMerk zoals te zien is in de code) maar ik krijg het niet voor mekaar. Doordat ik nu tal van tutorials gezien heb begint het eerder een bomen - bos verhaaltje te worden.
Met een simpele join-query uit te voeren in mijn controller zou m'n probleem wel opgelost zijn maar ergens heb ik het gevoel dat dit niet de bedoeling is van het framework. Ik zou het veel liever op de 'juiste' manier aanpakken maar hier loop ik dus compleet op vast. Kan iemand mij hierin terug op weg helpen of zit ik echt helemaal verkeerd te werken?
De structuur die ik gebruik is gebaseerd op de tutorial die ik heb gevonden op volgende site: Sitemasters.be
Omdat ik (buiten wat theoretische lessen en wat 'hello world' applicaties in java) zeer weinig kennis heb van het OO gebeuren heb ik besloten om een framework te gebruiken om toch ergens een houvast te hebben. Zend leek me boeiend en perfect wat ik zocht.
Na een aantal tutorials doorgenomen betreffende het Zend-framework ben ik dan ook begonnen aan het opzetten van de site. Het basisopzet van het framework begrijp ik en hiermee slaag ik ook wat basisgegevens weer te laten geven.
Nu ben ik echter aangekomen bij het weergeven van data uit meerdere tabellen en loop ik vast in de denkwijze die Zend gebruikt.
Om het probleem te schetsen eerst wat beknopte info over mijn project:
tabellen
Ik heb een heel DB-schema opgesteld maar dit is bij mijn probleem niet belangrijk. Daarom geef ik gewoon 2 basistabellen:*tblWagen*
PK wagen_ID
wagen_merk (integer)
wagen_type (varchar)
wagen_versie (varchar)
etc...
*tblMerk*
PK merk_ID
merk_omschrijving
Code
Volgende code gebruik ik om gegevens weer te geven (niet-triviale data laat ik achterwegen):PHP: controllers/IndexController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| class IndexController extends Zend_Controller_Action{ public function init() { $this->initView(); //variabelen declareren $this->view->url = $this->_request->getBaseUrl(); // Modellen laden include './application/models/tblWagen.php'; include './application/models/tblMerk.php'; } public function indexAction() { $wagen = new Wagen(); // gegevens ophalen en weergeven $this->view->wagen = $wagen->fetchAll(); $this->render(); } } |
code: views/scripts/index/index.phtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?php echo $this->render('header.phtml'); ?> <?php echo $this->render('menu.phtml'); ?> <div id="pageContent"> <h1><?php echo $this->testHelper( $this->titel, '#663366' ); ?></h1> <p>Momenteel hebben we volgende wagens in voorraad:</p> <ol> <?php foreach( $this->wagen as $row ): ?> <li><?php echo $row->wagen_merk; ?> <?php echo $row->wagen_type." ".$row->wagen_versie;?> (id=<?php echo $row->wagen_ID ?>)</li> <?php endforeach; ?> </ol> </div> <?php echo $this->render('footer.phtml'); ?> |
PHP: models/tblMerk.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <?php class Merk extends Zend_Db_Table { protected $_name = 'tblMerk'; public function getMerk($id) { $where = $this->select()->where('id = ?',$id); $row = $this->fetchRow($where); return $row['merk_omschrijving']; } } ?> |
PHP: models/tblWagen.php
1
2
3
4
5
6
| <?php class Wagen extends Zend_Db_Table { protected $_name = 'tblWagen'; } ?> |
resultaat
Voorlopig heb ik volgende resultaat:code:
1
2
3
4
5
| Overzicht wagens Momenteel hebben we volgende wagens in voorraad: 1. 1 Laguna III Dynamique (id=1) |
Het is echter de bedoeling dat die 1 achter de nummering vervangen wordt door het merk (Renault in dit geval). Ik heb al verschillende zaken geprobeerd (oa. door helper toe te voegen aan het model van tblMerk zoals te zien is in de code) maar ik krijg het niet voor mekaar. Doordat ik nu tal van tutorials gezien heb begint het eerder een bomen - bos verhaaltje te worden.
Met een simpele join-query uit te voeren in mijn controller zou m'n probleem wel opgelost zijn maar ergens heb ik het gevoel dat dit niet de bedoeling is van het framework. Ik zou het veel liever op de 'juiste' manier aanpakken maar hier loop ik dus compleet op vast. Kan iemand mij hierin terug op weg helpen of zit ik echt helemaal verkeerd te werken?
De structuur die ik gebruik is gebaseerd op de tutorial die ik heb gevonden op volgende site: Sitemasters.be