login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[ZF] Relaties en Zend Framework (Opgelost)

Offline Diko - 13/02/2008 20:37
Avatar van DikoPHP interesse ik heb paar dagen terug het gemak ontdekt van het Zend Framework + het MVC pattern.

Echter zit ik met een vraag met betrekking tot relationships en ZF->MVC. In de ZF manual is er wel iets over te vinden. En hoe de relaties dan gelegt worden is me ook duidelijk.

Echter staat het voorbeeld op zichzelf, ik wil het gebruiken in een model. Moet ik nu alle Classes in losse models neerzetten? Of welke class roep ik aan als ik hem wil gebruiken in een controller?

Een zoektocht heeft me geen verheldering gebracht.

3 antwoorden

Gesponsorde links
Offline Stijn - 13/02/2008 21:44 (laatste wijziging 15/02/2008 00:14)
Avatar van Stijn PHP expert Een model is een database class die werkt met één tabel. Als je relaties hebt tussen de verschillende tabellen dan heb je ook relaties tussen de modellen. Hiervoor moet je inderdaad een refentieschema maken (zie de documentatie van ZF).

Een illustratie is hierbij niet onhandig . We nemen een klassiek voorbeeld. We maken een forum en deze bevat een aantal topics. Iedere topic kan meerdere reacties hebben. De relatie tussen de tabel topics en zijn onderliggende tabel reacties is 'has many'.

Omdat we met MVC werken maken we dus 2 models aan. Eén voor de tabel topics en één voor de tabel reacties. De relatie is dat één topic meerdere reacties heeft. Je kan nu kiezen hoe je te werk gaat maar een verstandige programmeur/scripter zal al direct zien dat de tabel reacties onder het niveau van de tabel topics staat (*) (zonder topics geen reacties moet je maar denken).

(*) Ook de tabel reacties kan onderliggende tabellen hebben.

Dus in je Reacties model zeg je hoe de tabel reacties afhankelijk is van de topics tabel.

  1. class Topics extends Zend_Db_Table {
  2.  
  3. protected $_name = "reacties");
  4.  
  5. }


  1. include_once 'models/Topics.php';
  2.  
  3. class Reacties extends Zend_Db_Table {
  4.  
  5. protected $_name = 'topics';
  6.  
  7. protected $_referenceMap = array( "Reacties" => array(
  8. "columns" => "topic_id" ,
  9. "refTableClass" => "Topics" ,
  10. "refColumns" => "id"
  11. ) );
  12.  
  13. }


Omdat het model Topics de model Reacties gebruikt moet je die ook includen.

Stel dat er nu een gebruik een topic met ID 123 wilt bekijken. Dan moet je niet met 2 modellen werken maar werk je met de referenceMap van het model Topics.

  1. public function viewAction()
  2. {
  3.  
  4. $topics = new Topics();
  5. $topic_id = $this->_request->getParam("id"); //$_GET['id']
  6.  
  7. //haal het topic uit zijn tabel
  8. $topic = $topics->fetchRow("id=" . $topic_id);
  9.  
  10. //haal de reacties op die bij het topic horen
  11. $reacties = $topic->findDependentRowset('Reacties');
  12.  
  13. }


Door zelf eens te experimenteren en met de functies van ZF te testen ga je zelf inzien dat je hiermee makkelijk relaties kan leggen tussen tabellen (en modellen).
Offline Diko - 13/02/2008 23:02
Avatar van Diko PHP interesse Wow, kijk dat is echt een super uitleg  
Offline Wouser - 03/08/2008 13:23
Avatar van Wouser PHP interesse Sorry voor de bump maar ik heb even een vraagje ik begrijp namelijk niet echt waarom is de var $_name bij topics 'reacties' en bij reacties 'topics'?

Ik dacht namelijk dat $_name de naam van de tabel namelijk is?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s