Ik was me aan het oriënteren op O/R mappers maar kwam eigenlijk niet echt een goede oplossing tegen. Ik heb daarom besloten er zelf een te schrijven, maar daar loop ik tegen een probleem aan.
Ik maak dit soort objecten:
Ik heb vervolgens in mijn mapper de volgende code voor addRelation():
over hoe ik dit kan oplossen, maar heb geen nette manier gevonden (überhaupt geen oplossing eigenlijk)...
Heeft _iemand_ een gouden tip?
Ik maak dit soort objecten:
PHP:
Hoe waarom verder je 1, 2, 3 of 4 argumenten meegeeft is afhankelijk van de type relatie. Een primary id mag je weglaten, dat kan het systeem zelf aanvullen.1
2
3
4
5
6
7
8
9
10
11
12
13
| class user extends dbObj{ public function __construct( $id ){ //setup dingen $this->addRelation( 'address', 'user_id' ); //maakt 1:many relatie } } class address extends dbObj{ public function __construct( $id ){ //setup dingen $this->addRelation( 'user', 'id', 'user_id') //maakt 1:many relatie } } |
Ik heb vervolgens in mijn mapper de volgende code voor addRelation():
PHP:
Ik moet met mijn systeem (denk ik) wel de $class instantiëren (regel #4). Hoe kan ik anders achterhalen of ik met een primary id zit of niet? Ik kom hiermee in een oneindige loop. Het php bestand wil bij uitvoeren zich laten downloaden door de browser, wat een compleet leeg bestand is. Er gebeurt namelijk dit:1
2
3
4
5
6
7
8
9
10
| final protected function addRelation( $class, $relId = false, $myId = false, $connector = false ){ //Controle of allerlei dingen wel kloppen $object = new $class(); if( !$relId ) $relId = $object->__primary; if( !$myId ) $myId = $this->__primary; if( $connector && class_exists( $connector ) ) $connectorObject = new $connector; //Analyseer de gegevens en bepaal het type relatie } |
- Instantieer user
- Door constructor wordt addRelation() uitgevoerd. Relatie met address bestaat dus nog niet
- Address wordt geinstantieerd door addRelation()
- Door constructor wordt addRelation() uitgevoerd. Relatie met user bestaat dus nog niet
- addRelation() geeft opdracht tot instantie van $user (dus goto 1).
Heeft _iemand_ een gouden tip?