[ZEND] JOIN query's met Zend_Db_Table_Abstract

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 11-09 20:35
Ik ben gestart met de implementatie van een applicatie waarbij gebruik wordt gemaakt van het Zend framework. Ik wil het model mappen op de database middels Zend_Db_Table_Abstract. De database ziet er ongeveer zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[users]
(username, password ... contactinfo)

[contactinfo]
(email, tel, ... postalinfo)

[postalinfo]
(naam, organisatie, ... address)

[address]
(straat, huisnr, ...)

users->contactinfo: 1op1
contactinfo->postalinfo: 1opMeer
postalinfo->address: 1op1


Met 1 SQL query waar een paar Joins in zitten kan ik dus in principe alle informatie van 1 gebruiker selecteren. Ik probeer het model echter te mappen adhv Zend_Db_Table_Abstract en daarbij zie ik niet zo snel hoe ik dit netjes kan doen. Ik kan doormiddel van $_dependentTables en $_referenceMap bij elke table de relatie aangeven alleen lijkt deze niet iets te joinen maar bied het alleen een interface aan om via de klasse Users (welke een Zend_Db_Table_Abstract is van de tabel 'users') de contactinfo rij op te vragen middels findDependentRowset(..);

Als ik het op deze manier implementeer wordt er dus voor elke tabel een aparte query uitgevoerd terwijl dat totaal onnodig is als ik van te voren al weet dat een gebruiker wil hebben met al zijn informatie. Is dit binnen Zend op een andere manier op te lossen of zal ik alsnog zelf mijn query's moeten gaan schrijven / een aparte ORM mapper moeten gebruiken? Mijn ervaring met Zend is zeer minimaal en ik heb ook geen ervaring met ORM mappers in PHP en wil het daarom het liefst bij Zend houden om de leercurve niet te groot te maken.

In de zenddocumentatie wordt er wel over relaties gesproken maar daar wordt eigenlijk hetzelfde gedaan.

...


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 11:48
Volgens mij klopt het wat jij zegt, je zult dus toch zelf je query moeten schrijven:

PHP:
1
2
3
4
5
$select = $users->select()
                      ->setIntegrityCheck(false)
                      ->from( $users, array('id', 'name'))
                      ->joinLeft('address', 'users.id = address.id_user', array('address_id'=>'id'));
$rows = $users->fetchAll($select);

"Chaos kan niet uit de hand lopen"