MVC Model - Join von mehren Tabellen

MontyBurns

Mitglied
Hallo allerseits,

ich will mir einen Blog schreiben (für den Anfang) und ich glaube, ich habe einen Denkfehler, der mich bald in den Wahnsinn treibt.

Was bisher geschah:
  1. Wie sich's gehört habe ich in der Datenbank alles ohne Redundanz schön in einzelne Tabellen auseinandergepfriemelt (3. Normalform - alles ganz vorbildlich).
  2. Der MVC an sich funktioniert auch .. gibt ja Tutorials dazu, wie Sand am Meer .. leider alle ohne Business-Logic.
  3. Eine Tabelle pro Model (z.B. Post_Model oder Category_Model oder Tag_Model) funktioniert auch. Jedes Model schön mit privaten Klassenvariablen und Settern und Gettern für jede einzelne davon. Und dann noch die Create/Update/Delete-Methoden für jedes Model bzw. im Model von dem geerbt wird.
  4. Dann hab ich noch ein extra Model (z.B. Posts_Model oder Categories_Model oder Tags_Model), das GetRow/GetMany/GetAll-Methoden hat, und für jedes Tupel, das aus der Datenbank kommt ein Model (in diesem Beispiel: Post_Model) erzeugt und in ein Array klatscht, das dann an den Controller (z.B. Index_Controller) zurückgegeben wird.


Aber was mache ich bei mehreren Tabellen pro Model?


Beispiel:
Bei tutorials.de gibts im Forum "Kategorien" und "Stichworte".
Ich vermute, die stecken nicht in der Posts-Tabelle mit drin, sondern es gibt ein Modell/eine Tabelle für Kategorien, Stichworte und Posts (.. wie bei meinem Blog).


Konkret:
Ich will einen Post (Post_Model bzw posts-Tabelle) mit einer oder mehreren Kategorien (Category_Model bzw. categories-Tabelle) und einem oder mehreren Tags (Tag_Model bzw. tags-Tabelle) in Relation bringen können.

Jedes Model bildet eine Tabelle in der Datenbank super ab - und wenn keine Relationen zwischen den Models bestünden, dann wäre alles ganz einfach ..

Aber muss ich jetzt wirklich für jede Kombination ein eigenes Model schreiben (PostCategory_Model und PostTag_Model und PostCategoryTag_Model)?

Und selbst wenn ich das tun würde, dann hätte ich das Post- bzw. Category- bzw. Tag-Model völlig umsonst geschrieben.

Ich weiss der Schlauch ist unter mir, aber auch wenn ich nen Schritt zur Seite gehe, steh ich noch drauf.


Falls jemand noch mehr Infos braucht, dann bitte bescheid sagen was unklar/misverständlich ausgedrückt ist.
Bin jedenfalls für jede Antwort, die mir zumindest die Tür zeigt, durch die ich gehen muss, dankbar.


Grüße

Monty
 
Was du da baust ist ein Object Relational Mapper (ORM), die Standard implementierungen hierzu bieten meist auch Methoden zum joinen verschiedener Models an, siehe: http://propelorm.org/

PHP:
$books = BookQuery::create()  // retrieve all books...
  ->filterByPublishYear(2009) // ... published in 2009
  ->orderByTitle()            // ... ordered by title
  ->joinWith('Book.Author')   // ... with their author
  ->find();

Manchmal wird die Beziehung (Relation) auch eifnach über eine membervariable erstellen, zB hier: http://fuelphp.com/docs/packages/orm/relations/intro.html

alxy
 
Vielen Dank alxy,

ich werd mir FuelPHP und ORM allgemein mal näher ansehen.

Ich bin mir ziemlich sicher, dass sich dadurch mein Problem lösen wird, daher sehe ich dieses Thema als erledigt an.

Bin äusserst gespannt, wie die dieses "joinWith" implementiert haben.


Grüße

Monty
 
Nur zum verständnis: Beides sind ORm-Implementierungen/Umsetzungen, Propel ist ein Standallone-ORM und fuelphp ein framework, dass auch einen solchen Mapper anbietet ;) Kannst dir natürlich trotzdem beides ansehen oder noch nach weiteren Umsetzungen googlen :)
 
Zurück