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 |
---|
UserId | autoinc |
Username | |
Firstname | |
... | .. |
RunInfo |
---|
RunId | Bevat het run-nummer, autoinc |
Name | Bevat een korte beschrijving van de run |
FkUserId | Bevat een key naar de user |
... | .. |
RunStep |
---|
StepId | Bevat het run-nummer, autoinc |
FkRunId | Fk naar de run |
FkEquipmentId | Bevat een key naar het gebruikte equipment |
... | .. |
Equipment |
---|
EquipmentId | autoinc |
EquipmentName | |
EquipmentLocation | |
... | .. |
Nu wil ik dus met behulp van die relaties een overzicht krijgen die er als volgt uitziet
Equipment: Koelkast
RunId | Times in run | run name | username |
---|
1 | 2 | Testrun | Jan |
2 | 4 | Testrun 3 | Piet |
6 | 2 | Oefensessie | Henk |
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?