Empfehlungen: Erweiterte Suche

HABTM mit zusätzlichen Feldern

Daten auslesen, verarbeiten und den Views übergeben

HABTM mit zusätzlichen Feldern

Beitragvon Frescha » Di 8. Sep 2009, 00:03

Hallo zusammen,
ich möchte in meiner Verknüpfungstabelle messages_users zusätzlich Informationen speichern, wie zum Beispiel ob User X, Nachricht Y schon gelesen hat.
Mit folgendem Code kann ich die Verknüpfungstabelle mit den zusätzlichen Feldern problemlos auslesen.

Code: Alles auswählen

        $conditions = array('and' => array(
                            'MessagesUser.user_id' => $user_id,
                            'MessagesUser.opened' => "0",  
                            ));
                           
        $order = array('Message.created DESC');

        $this->Message->MessagesUser->bindModel(array('belongsTo'=>array('Message', 'User')));
        $inbox = $this->Message -> MessagesUser-> find('all', array('conditions'=> $conditions, 'order'=>$order));
 

Was mir zur Zeit gar nicht gelingen mag ist das Erstellen von genau so einem Datensatz.

Bild

Was wirklich wunderbar funktioniert ist das Erstellen von einem ganz normalen HABTM Datensatz.
Aus den Ergebnissen die ich durch Google gefunden habe bin ich auch nicht wirklich schlauer geworden, ich glaube dafür mache ich das ganze noch nicht lange genung. Irgend wie muss es ja funktionieren. Vll könnt ihr mir ja ein oder zwei Hilfestellungen geben.
Frescha
 
Beiträge: 15
Registriert: Mi 24. Dez 2008, 16:54
OS: os x

Re: HABTM mit zusätzlichen Feldern

Beitragvon euromark » Di 8. Sep 2009, 02:18

verwende statt HABTM 2x BelongsTo/HasMany

ich verwende nie HABTM - viel zu wenig möglichkeiten der anpassung - macht zu viel müll beim updaten

die mittlere tabelle heißt dann einfach message_users oder user_messages
und hat die beiden BelongTo Einträge user_id und message_id
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM mit zusätzlichen Feldern

Beitragvon Frescha » Di 8. Sep 2009, 17:52

Funktioniert tatsächlich wunderbar.
Für alle die irgendwann einmal vor einem ähnlichen problem stehen.

Messages --> hasMany --> Messages_Users <-- hasMany <-- Users
Messages <-- belongsTo <-- Messages_Users --> belongsTo --> Users
Messages --> hasMany --> Users

edit: Update
Frescha
 
Beiträge: 15
Registriert: Mi 24. Dez 2008, 16:54
OS: os x

Re: HABTM mit zusätzlichen Feldern

Beitragvon euromark » Di 8. Sep 2009, 22:54

naja, letzteres kannst du dir eigentlich sparen
man kommt immer über die mitteltabellen auf die 3.
aber vermutlich ist der overhead nicht allzu groß
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM mit zusätzlichen Feldern

Beitragvon Frescha » Mi 9. Sep 2009, 08:20

ok das "Messages --> hasMany --> Users " kann ich mir glaube ich echt sparen.
Mein Aktuelles Problem ist folgendes, ich möchte das eine Message mehrere Empänger also User hat. Das ganze würde ja mit einer HABTM Verbindung ziemlich automatisch ablaufen, es würden einfach 2 Datensätze in der Verknüpfungstabelle angelegt werden.
Wenn ich nun in der entsprechenden View vom Messages Controller mehrere User auswähle, wird mir ein array erzeugt mit den IDs von den Usern, allerdings kann ich dies nicht abspeichern da in der Verkünpfungstabelle nur ein statt zwei Datensätze erzeugt werden. Ich bräuchte nun irgendeine Möglichkeit ein Array erfolgreich in einer hasMany Verbindung abzuspeichern, so dass beliebig viele Datensätze in der Entsprechenden Verküpfungstabelle angelegt werden
Frescha
 
Beiträge: 15
Registriert: Mi 24. Dez 2008, 16:54
OS: os x

Re: HABTM mit zusätzlichen Feldern

Beitragvon euromark » Mi 9. Sep 2009, 13:00

das sind halt dinge, die man manuell im model als funktion hinterlegt
ich würde das in das "mittlere model" packen

als schleife mit foreach($id as $foo) jedesmal
-> create()
-> save()

fertig
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM mit zusätzlichen Feldern

Beitragvon Frescha » Do 10. Sep 2009, 14:33

danke für den tipp mit der foreach schleife, mit bisschen nachdenken hätte man da auch selbst draufkommen können.

ich habe allerdings die verarbeitung des arrays (die User, die die nachhricht empfangen sollen) in den Controller gelegt weil es für mich ihrgendwie logischer erscheint oder ist das ganze dann doch besser im Model aufgehoben?
Danke für die Hilfestellungen :)
Frescha
 
Beiträge: 15
Registriert: Mi 24. Dez 2008, 16:54
OS: os x

Re: HABTM mit zusätzlichen Feldern

Beitragvon euromark » Do 10. Sep 2009, 15:02

nein
nicht unbedingt

es kann zu code doppelung kommen, wenn man an einer anderen stelle nochmal messages verschicken will.
aber wenn dem nicht der fall ist, passts ja
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM mit zusätzlichen Feldern

Beitragvon Alex » Mo 21. Sep 2009, 22:50

Ich habe in meinem PM-System für jeden Empfänger eine neue Zeile in der DB erstellt. Also bei einer Nachricht vom User #3 an User #4, #5 und #6 würden 3 Einträge in die DB geschrieben werden.

Code: Alles auswählen
id | user_id | sender_id | message | read | deleted | created
------------
1 | 4 | 3 | Nachricht... | 0 | 2009-12-12 10:00:00
2 | 5 | 3 | Nachricht... | 0 | 2009-12-12 10:00:00
3 | 6 | 3 | Nachricht... | 0 | 2009-12-12 10:00:00
 


So kannst du alle Nachrichten getrennt voneinander behandeln. Jetzt könntest du noch den Nachrichten-Text auslagern in eine extra Tabelle. Finde ich allerdings etwas zu viel des Guten.
Alex
 
Beiträge: 120
Registriert: Di 13. Mai 2008, 13:39
Wohnort: Bremen
CakePHP-Version: 1.x.x
OS: OSX / Win 7 / Debian


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast