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!