Sonntag, 6. Juli 2008

entwickler.com Magazine Konferenzen Entwickler Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag





November 2007
aus PHP Magazin Ausgabe: 6.2007
Kuchen backen!
Agile Webapplikationen mit dem CakePHP-Framework



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!


  1. http://www.cakephp.org
  2. http://bakery.cakephp.org
  3. http://pear.php.net/manual/de/package.xml.xml-rss.php
  4. http://bakery.cakephp.org/categories/view/4
  5. http://groups.google.ch/group/cake-php/web/cake-apps-sites-in-the-wild
  6. http://www.cakefoundation.org/pages/certification
    Hat Ihnen dieser Artikel gefallen? Dann abonnieren Sie das PHP Magazin direkt über unser

zur vorherigen Seite
zurück
an den Anfang der Seite
nach oben
Diesen Artikel drucken
drucken
Diesen Artikel weiterempfehlen
empfehlen

Software & Support Verlag GmbH