Generierter
Quellcode: Modell
Weil bake dank den Einstellungen in database.php
weiß,
wie unsere DB-Struktur aussieht, kann es auch passende
Vorschläge
geben. Es fragt nach Wunsch für jedes Feld, welche
Validierungskriterien wir anwenden wollen und welche Assoziationen
zwischen den Tabellen bestehen. Bei unserem Beispiel müssen
wir
einzig die Assoziation hasMany für das
Modell Feed
anwählen, die ausdrückt, dass ein Feed viele
Feed-Einträge
besitzt. Analog dazu, setzen wir beim Modell FeedItem
eine
belongsTo-Verbindung zu Feed.
Mögliche
Assoziationstypen
zwischen Modellen
hasOne: 1:1-Relation
hasMany: 1:n-Relation
belongsTo: Relation
ausgehend von der Kind-Tabelle, z.B. ein Kommentar unter vielen
gehört zu einem Blog-Post
hasOneAndBelongsToMany (HBTM):
n:m-Relation, bei Verbindungen in der Art von “Tags zu
Artikeln”
Das Produkt unserer ersten Back-Sitzungen finden wir im Ordner
/cake/app/models/ – die Namensgebung folgt
den
CakePHP-Konventionen – feed.php
für die Klasse Feed
und feed_item.php für FeedItem.
Werfen wir einen
Blick in die Datei /app/models/feed.php, die in
Listing 3
einsehbar ist:
<?php
class Feed extends AppModel {
var $name = 'Feed';
var $hasMany = array(
'FeedItem' =>
array('className' => 'FeedItem',
'foreignKey' => 'feed_id',
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'dependent' => true,
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
),
);
}
?>
Die Klasse Feed erbt von AppModel,
einer
CakePHP-Klasse, und enthält nur zwei Variablen: ,
mit dem Namen der Modellklasse und die von uns gewünschte
Assoziation . Die hier möglichen
Parameter sind
von bake präventiv eingefügt worden. Uns interessiert
der
Schlüssel dependent, den wir auf true
(boolean,
nicht string!) setzen. Das bringt CakePHP dazu, beim Löschen
eines Feed-Eintrags alle dazu gehörenden FeedItems
zu
löschen. Wie man vielleicht erkennt, ist es möglich,
maßgeschneiderte Assoziationen vorzubereiten, welche eine
Sortierordnung, limitierte Anzahl an Resultaten, spezielle
Filterkriterien, Felder und so weiter enthalten können.
Listing 4: Objekt
für das
Modell FeedItem
<?php
class FeedItem extends AppModel {
var $name = 'FeedItem';
var $belongsTo = array(
'Feed' =>
array('className' => 'Feed',
'foreignKey' => 'feed_id',
'conditions' => '',
'fields' => '',
'order' => '',
'counterCache' => ''
),
);
}
Listing 4 zeigt die Datei /app/models/feed_item.php
an. Wie bei feed.php findet hier die
Assoziation als
Array statt, diesmal aber wird die Variable
gesetzt. Das Modell ist somit komplett. Gehen wir nun ans Generieren
der Controller und starten erneut bake.php!
rtauchnitz17.09.2007 um 21:40 UhrDer Artikel ist ziemlich gut, aber kann es sein, dass die im Artikel benannten externen Links (z.B. [6]) nirgendwo ausgeschrieben sind?#zitieren
Robert18.09.2007 um 11:38 UhrStimmt, da hatte unser CMS sich ein wenig an den Links "verschluckt". Die Links sollten jetzt aber jeweils am Ende der Seite angezeigt werden. An der Möglichkeit, die Links direkt (und automatisch) im Text einzubinden arbeiten wir bereits.
Schöne Grüße,
Robert#zitieren