CakePHP & DIEVOLUTION Blog
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
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.
2 Reaktionen zu “Habtm Speichern - Minihilfe”
-
Am 22. Januar 2008 um 22:20 Uhr
Hi Thomas,
wiedermal ein nützlicher Artikel, gerade die HABTM-Verbindungen sind erstmal ein Genick Brecher bei CakePHP. Enorm sinnvoll, der Link am Ende. Hatte nämlich in meiner aktuellen Anwendungen User, die sich zu Tags assoziieren konnten. Beim editieren der Tags, wurden aber alle bestehenden Tag-Verbindungen erstmal wieder gelöscht *WTF*?? Mit diesem Zusatz kann ich die Tagverbindungen nun speichern, ohne das Cake mir diese zuerst wieder raushaut
-
Am 10. März 2008 um 12:49 Uhr
Ich arbeite mich gerade in die Version 1.2 (beta) ein und habe den Vormittag damit verbracht meinen Fehler (duplicate entry) in der HABTM Funktion zu finden (CakePHP Anfänger).
Nach ca. 2,5 Stunden musste ich herausfinden, dass es ein CakePHP Fehler ist.
Die Lösung für alle: https://trac.cakephp.org/ticket/3814
Viel Spaß beim backen!
Auf einen Blick
Archiv
- Oktober 2008
- August 2008
- Juli 2008
- Juni 2008
- Mai 2008
- April 2008
- März 2008
- Februar 2008
- Januar 2008
- Dezember 2007
- November 2007
- Oktober 2007
- September 2007
- August 2007
- Juli 2007
- Juni 2007
- Mai 2007
- April 2007
Kategorien
- Allgemein (72)
- Cake vs Rails (3)
- CakePHP (42)
- Meinung (16)
- Projekt (6)
- Rails (5)
- Tipps (27)
- Typo3 (4)
Letzte Einträge:
- 11.04.2007: Neustart
- 11.04.2007: Design Version 1 steht
- 11.04.2007: Blog