Frage

Ich bin relativ neu in CakePHP, und ich bin eine CakePHP Anwendung zu schreiben, das derzeit ein Autor Modell und ein Buch-Modell hat. Autor und Buch haben beide eine many-to-many-Beziehung.
Ich mag jedoch zusätzlich für jede Autor-Buch Beziehung in diesen Autor Blog einen entsprechenden Link, wo sie auf ihre Erfahrungen während dieses Buch zu schreiben.

Wenn das verwirrend war, die folgenden Absätze versuchen zu erarbeiten meine Situation klarer zu machen:

Für jeden Autor, wird es für jedes Buch ein Artikel über ihre Erfahrungen sein. Um in dieser Beziehung in umgekehrten zu sehen, bedeutet dies, dass für jedes Buch, wird es eine entsprechende Verbindung sein, pro Autor (vorausgesetzt, dass Bücher mehr Autoren haben können), wo dieser Autor seine / ihre Erfahrungen zu schreiben, das Buch beschreibt.

Mit anderen Worten, für jeden einzelnen (Autor, Buch) Paar, ich möchte in der Lage sein, eine ähnliche URL zu speichern.

In mehr Phantasie, abstracty mathematische Begriffe, die ich schrecklich verwenden und nicht richtig: Ich habe einen ungerichteten Graphen, wo jede Ecke ein Autor oder ein Buch, und jede Kante hat einen Autor für eine Ecke und ein Buch für den anderen. Das klingt irgendwie verwirrend, aber (ich glaube) es beschreibt meine Situation so genau, wie ich es machen kann.
In Anbetracht der obigen Beschreibung, möchte ich wissen, ob ich beliebige Daten zu einem bestimmten Rand dieser Beziehung anbringen kann, und rufen Sie sie später.

Zur Zeit habe ich ein drittes Modell, AuthorBook, die die Graphkante wirkt.
Autor hat eine hasMany Beziehung zu AuthorBook.
Buch hat eine hasMany Beziehung zu AuthorBook.
AuthorBook hat eine belongsTo Beziehung zu Autor und Buch, und verfügt zusätzlich über ein URL-Feld.

Diese Lösung funktioniert, aber aus irgendeinem Grund die Tatsache, dass Buch nicht direkt mit Autor verbunden ist stört mich. Gibt es eine Möglichkeit, diese gleiche Wirkung zu erzielen, während auch das AuthorBook Modell aus dem Bild schneiden?

(Auch ich merke, dass ich kann sie direkt im Zusammenhang während AuthorBook zu halten, aber das scheint hässlich und auch redundant.)

(Auch ich weiß, dass ich immer noch eine author_book SQL-Tabelle haben würde. Das stört mich nicht im geringsten, ich denke, dass es unmöglich ist, ohne irgendwie zu tun.)

Vielen Dank für Ihre Zeit! Und bitte Flamme mich nicht !!!

War es hilfreich?

Lösung

Ja, können Sie die AuthorBook Beziehung (oder die ‚Kante‘, wie Sie es sich vorstellen) modellieren.

class Author extends AppModel {
    ...
    $hasAndBelongsToMany = array('Book', array('with' => 'AuthorBook'));
    ....
}

Die "with" HABTM Option:

  

Definiert den Namen des Modells für den Tisch kommen. Standardmäßig CakePHP wird für Sie ein Modell automatisch erstellen. Im oben genannten Beispiel es RecipesTag genannt werden würde. Mit dieser Taste können Sie diese Standardnamen überschreiben. Die Join-Tabelle Modell wie jedes „normale“ Modell verwendet werden kann, um die Tabelle direkt anschließen zuzugreifen.

Dies ist das Äquivalent von RoR des "through", dargestellt ganz schön in diese Darstellung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top