Domanda

Sono relativamente nuovo in CakePHP e sto scrivendo un'applicazione CakePHP che attualmente ha un modello Author e un modello Book. Autore e libro hanno entrambi una relazione molti-a-molti.
Tuttavia, vorrei inoltre, per ogni relazione tra autore e libro, avere un link corrispondente al blog dell'autore in cui riflettono sulle loro esperienze di scrittura di quel libro.

Se questo è stato fonte di confusione, i seguenti paragrafi cercano di elaborare per rendere più chiara la mia situazione:

Per ogni autore, ci sarà un articolo sulle loro esperienze per ogni libro. Guardare questa relazione al contrario, ciò significa che per ogni libro, ci sarà un link corrispondente, per autore (dato che i libri possono avere più autori), in cui quell'autore descrive la sua esperienza scrivendo il libro.

In altre parole, per ogni singola coppia (Autore, Libro), vorrei essere in grado di memorizzare un URL correlato.

In termini matematici più fantasiosi e astratti che userò in modo orribile e improprio: ho un grafico non orientato, in cui ogni vertice è un autore o un libro e ogni margine ha un autore per un vertice e un libro per l'altro. Sembra un po 'confuso, ma (penso) descrive la mia situazione nel modo più preciso possibile.
Data la descrizione di cui sopra, voglio sapere se posso allegare dati arbitrari a qualsiasi dato bordo di quella relazione e recuperarli in seguito.

Attualmente ho un terzo modello, AuthorBook, che agisce sul bordo del grafico.
L'autore ha molte relazioni con AuthorBook.
Il libro ha molte relazioni con AuthorBook.
AuthorBook ha una relazione di proprietà con Autore e Libro e ha inoltre un campo URL.

Questa soluzione funziona, ma per qualche motivo il fatto che Book non sia direttamente collegato all'autore mi dà fastidio. Esiste un modo per ottenere questo stesso effetto, tagliando al contempo il modello di AuthorBook?

(Inoltre, mi rendo conto che posso averli direttamente collegati mantenendo AuthorBook, ma questo sembra brutto e anche ridondante.)

(Inoltre, mi rendo conto che avrei ancora una tabella SQL author_book. Questo non mi disturba minimamente, penso che sia impossibile farne a meno comunque.)

Grazie per il tuo tempo! E per favore non darmi fuoco !!!

È stato utile?

Soluzione

Sì, è possibile modellare la relazione di AuthorBook (o il "bordo" come previsto).

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

Il " con " opzione habtm:

  

Definisce il nome del modello per la tabella di join. Per impostazione predefinita, CakePHP creerà automaticamente un modello per te. Utilizzando l'esempio sopra sarebbe chiamato RecipesTag . Usando questa chiave è possibile sovrascrivere questo nome predefinito. Il modello della tabella di join può essere utilizzato come qualsiasi altro "normale". modello per accedere direttamente alla tabella di join.

Questo è l'equivalente di RoR da " a " ;, raffigurato abbastanza bene in questa illustrazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top