Frage

Die Frage im Zusammenhang mit HABTM wurde in einigen guten Zahlen auf Stackoverflow veröffentlicht, aber ich suche immer noch nach einer Lösung für mein Problem.

Ich erstelle eine Anwendung, die die Erstellung von Themen basierend auf einer bestimmten Unterkategorie ermöglicht. Während des Hinzufügens eines Themas wird der Benutzer nach Tags gefragt (auf demselben Formular). Wenn der Benutzer das Thema auf der Schaltfläche Klicken auf die Schaltfläche "Hinzufügen" fertiggestellt hat, wird das Thema erfolgreich hinzugefügt, die Tags jedoch nicht.

Ich habe die Join -Tabelle für sowohl Themen als auch Tags als Tag erstellt tbl_tags_topics. (wie in den Konventionen von CakePhp definiert) und definiert das Array "HasandBelongstomany" in den Modellen von Themen und Tags ordnungsgemäß.

Welche Schritte fehlen ich jetzt.

Ich habe eine weitere Frage zu diesem Zeitpunkt, aber ich werde es veröffentlichen, wenn ich Tags zu einem Thema, das erfolgreich in die Datenbank zu tun hat, Tags senden kann. (Die Funktionalität ähnelt der von Stackoverflows Tags, die addieren und anhängen).

Jede Hilfe wird sehr geschätzt. Lassen Sie mich auch gute Tutorials für HABTM wissen, wenn Sie eine finden.

Vielen Dank

War es hilfreich?

Lösung 2

Mit Hilfe von Mr. Stornvig, Ich konnte mein Problem lösen. Hier ist der Verknüpfung Dies beschreibt das vollständige Verfahren, wie eine solche Funktionalität in CakePhp erreicht werden kann. Dies ist ein großartiges Tutorial, um mehr über die HABTM -Beziehung zu erfahren.

Für Version 1.3 habe ich herausgefunden, dass diese Technik nützlich ist. Hier sind die Schritte:

Nachdem Sie das HABTM -Beziehungsarray in beiden Modellen definiert haben

Erstellen Sie Ihre Form wie dieses

echo $form->create('Job');
echo $form->input('title');
echo $form->input('description');
echo $form->input('location');
echo $form->input('Category');//note the caps and single plural
$form->end('Submit');

und dann in der Controller -Methode addieren Sie einfach die

SaveAll ($ this-> Daten)

und die Join -Tabelle wird auch mit den erforderlichen Datensätzen bevölkert.

Mehr Info

Andere Tipps

Wenn Sie eines der Felder speichern, übergeben Sie solche Parameter:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field)
);

Wenn Sie Tags haben, das ein HABTM ist, können Sie Folgendes tun:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field'),
    'Tag' => array('Tag' => array(1))
);

Es gibt jedoch ein Problem mit dieser nativen Funktion, dass Sie jedes Mal, wenn Sie Ihr Objekt speichern, passieren müssen jeder Tag zum gespeicherten Array. Ansonsten werden sie alle zuvor entfernt, um sie zu lesen.

Sie können jedoch auf der Bäckerei finden, ein Plugin nennt erweiterte Assoziationen.

Mit der Verwendung würden Sie es tun:

$this->Model->habtmAdd('Tag', 1, 1);

Wo die erste "1" die Objekt -ID des Modells ist. Und die zweite ist die Objekt -ID des Tags.

Und um ein Tag zu entfernen:

$this->Post->habtmDelete('Tag', 1, 1); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top