Habtm Speichern – Minihilfe
Es gibt nichts gemeineres als eine “Has-and-belongs-to-many-Association”. Gerade als Neu-Bäcker hat man damit oft Probleme. Aber auch als altgedienter CakePHP User hat man nicht immer auf Knopfdruck die entsprechende Befehlskette zur Hand, daher hier eine kleine Minihilfe, die euch (und auch mir) helfen sollte, falls mal wieder einfach nichts gespeichert werden will.
Ausgangssituation:
- Tabelle1: Posts
- Tabelle2: Tags
- Posts hat und gehört zu vielen Tags (Jeder Post hat viele Tags, die wiederrum viele Posts haben)
Will man nun ein neues Tag an einem bestehenden Post speichern, das dann in Zukunft von anderen Posts auch benutzt werden kann, so legt man zusätzlich zu den Tabellen “posts” und “tags” eine Tabelle “posts_tags” mit den Werten id, post_id und tag_id an.
Ist dies geschehen, kommt bei der Verarbeitung des Tags im Controller folgendes noch dazu:
-
…
-
function create($post_id = NULL) {
-
//Diese Zeile teilt Cake mit, dass es eine HABTM Speicherung durchführen soll
-
$this->data[‘Post’][‘Post’][] = $post_id;
-
//Es reicht, nur das Tag zu speichern
-
$this->Tag->save();
-
…
Möchte man mehrere Posts gleichzeit einem neuen Tag übergehen:
-
…
-
//Diesmal übergeben wir ein Array aus Post-Ids: array(1,2,3,4)
-
foreach($posts as $elem)
-
$this->data[‘Post’][‘Post’][] = $elem;
-
//Es reicht, nur das Tag zu speichern
-
$this->Tag->save();
-
…
Diese kleine Gedankenstützt hilft, viel Ärger und rumprobieren zu verhindern.
PS: Wer eine wirklich geniale Art sucht, um Habtm Daten zu speichern, sollte sich einmal diesen Artikel ansehen:
http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior
Kategorie: CakePHP, Tipps | 3 Kommentare »
Veröffentlicht am Dienstag, den 22. Januar 2008 um 17:33 Uhr veröffentlicht
Du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.
