Agile Webapplikationen mit dem CakePHP-Framework

Kuchen backen!
Kommentare

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,

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:


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:

psenv::pushli(); eval($_oclass[„name“]); psenv::popli(); ?>

, mit dem Namen der Modellklasse und die von uns gewünschte Assoziation

psenv::pushli(); eval($_oclass[„hasMany“]); psenv::popli(); ?>

. 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


array('className' => 'Feed',

'foreignKey' => 'feed_id',

'conditions' => '',

'fields' => '',

'order' => '',

'counterCache' => ''

),

);

}

Listing 4 zeigt die Datei /app/models/feed_item.php style=“font-style: normal;“> an. Wie bei feed.php findet hier die Assoziation als Array statt, diesmal aber wird die Variable

psenv::pushli(); eval($_oclass[„belongsTo“]); psenv::popli(); ?>

gesetzt. Das Modell ist somit komplett. Gehen wir nun ans Generieren der Controller und starten erneut bake.php!

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -