Zend_Db_Table_Relationships en JOIN met meer dan 3 tabellen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 19-09 09:51
(jarig!)
Ik ben al gedurende een aantal weken bezig om mijn database-applicatie te herschrijven met behulp van het Zend Framework. Ik heb een aantal zaken zoals Zend_Auth en Zend_Acl al redelijk goed werken, maar loop nu tegen een probleem op, waarvoor ik dus wat hulp zou kunnen gebruiken.

Het probleem heeft te maken met Zend_Db, meer bepaald met Zend_Db_Table_Relationships Om dit probleem iets beter te kunnen inkaderen geef ik eerste een overzicht van de relevante tabellen in de database

User
UserIdautoinc
Username
Firstname
.....


RunInfo
RunIdBevat het run-nummer, autoinc
NameBevat een korte beschrijving van de run
FkUserIdBevat een key naar de user
.....


RunStep
StepIdBevat het run-nummer, autoinc
FkRunIdFk naar de run
FkEquipmentIdBevat een key naar het gebruikte equipment
.....


Equipment
EquipmentIdautoinc
EquipmentName
EquipmentLocation
.....


Nu wil ik dus met behulp van die relaties een overzicht krijgen die er als volgt uitziet
Equipment: Koelkast
RunIdTimes in runrun nameusername
12TestrunJan
24Testrun 3Piet
62OefensessieHenk


Nu, met klassieke sql is dit niet zo'n probleem, met de juiste joins en counts is deze query zo gebouwd. Ik krijg het echter niet voor elkaar om dit met de Zend_Db_Table_Relationships te maken.

Ik heb dus al gebruik gemaakt van de volgende code
PHP:
1
2
$row->findManyToManyRowset('SoloDB_Model_DbTable_RunInfo',
                                                        'SoloDB_Model_DbTable_RunStep'

Deze code verzorgt de koppeling tussen RunInfo en RunStep en levert mij dus wel een overzicht op van alle runs waarbij het equipment in 1 van de stappen toegepast is maar het lukt mij daarbij dus niet meer om ook de gebruiker te laten zien (ipv alleen de UserId). Ik moet dus nog een extra JOIN hebben naar de users-tabel (en later nog naar andere tabellen)

Ook zou ik graag een COUNT toevoegen met een GROUP BY om te weten hoe vaak een stap met dat equipment per run is uitgevoerd ipv een overzicht van alle stappen met bijbehorende run_id

Weet iemand of het mogelijk is om dat volledig met Zend_Db_Table_Relationsship te doen? Ik weet dat findManyToManyRowset ook een optionele $select kan verwerken voor een order_by of iets dergelijks maar ik weet nu niet hoe ik die extra mapping van de gebruiker daarin krijg.

Of moet ik hiervoor een hele andere benadering gebruiken?

Solo Database: Online electronic logbook and database system for research applications


Acties:
  • 0 Henk 'm!

  • Eddy Dean
  • Registratie: November 2007
  • Laatst online: 17:58
Ik heb geen kaas gegeten van het Zend framework, maar waarom probeer je krampachtig iets te laten genereren door een framework wat beter lukt met een gewone SQL query? Stop die query ergens netjes weg in een DAO en het is helemaal niet lelijk. Een goede ORM zal je ook zelf queries laten uitvoeren voor dingen die te complex of te performance-kritisch zijn om automatisch te genereren, ik neem aan dat ding met Zend_Db ook wel mogelijk is.

Acties:
  • 0 Henk 'm!

  • japaveh
  • Registratie: Maart 2003
  • Laatst online: 19-09 09:51
(jarig!)
Eddy Dean schreef op vrijdag 26 juni 2009 @ 14:37:
Ik heb geen kaas gegeten van het Zend framework, maar waarom probeer je krampachtig iets te laten genereren door een framework wat beter lukt met een gewone SQL query? Stop die query ergens netjes weg in een DAO en het is helemaal niet lelijk. Een goede ORM zal je ook zelf queries laten uitvoeren voor dingen die te complex of te performance-kritisch zijn om automatisch te genereren, ik neem aan dat ding met Zend_Db ook wel mogelijk is.
Voor normale n*m relaties vind ik de benadering van het zend-framework persoonlijk erg prettig werken. Gewoon het model de juiste relaties definieren en het framework de juiste query's laten genereren. Mocht inderdaad blijken dat mijn wensen niet binnen het framework passen zal ik een andere oplossing proberen. Het is juist daarom dat ik de vraag hier stel :)

Solo Database: Online electronic logbook and database system for research applications