Pergunta

Eu sou relativamente novo para CakePHP, e estou escrevendo uma aplicação CakePHP que atualmente tem um modelo de Autor e um modelo Book. Autor e Livro ambos têm uma relação muitos-para-muitos.
No entanto, eu gostaria de, adicionalmente, para cada relação autor-livro, ter um link correspondente ao blog que do autor onde eles refletir sobre suas experiências escrevendo esse livro.

Se isso foi confuso, os parágrafos seguintes tentam elaborar para fazer a minha situação mais clara:

Para cada autor, haverá um artigo sobre suas experiências para cada livro. Olhar para esta relação em sentido inverso, isto significa que para cada livro, haverá um correspondente link, por autor (dado que os livros podem ter vários autores), onde o autor descreve seu / sua experiência de escrever o livro.

Em outras palavras, para cada (Autor, Livro) par, eu gostaria de ser capaz de armazenar um URL relacionado.

Em mais extravagante, termos matemáticos abstracty que vou usar horrivelmente e de forma inadequada: Eu tenho um grafo não direcionado, onde cada vértice é um autor ou um livro, e cada aresta tem um autor para um vértice e um livro para o outro. Isso soa confuso, mas (eu acho) que descreve a minha situação tão precisamente quanto eu posso fazer isso.
Dada a descrição acima, eu quero saber se eu pode anexar dados arbitrários para qualquer vantagem dessa relação, e recuperá-lo mais tarde.

Atualmente tenho um terceiro modelo, AuthorBook, que atua na borda gráfico.
Autor tem um relacionamento hasMany para AuthorBook.
Livro tem um relacionamento hasMany para AuthorBook.
AuthorBook tem um relacionamento belongsTo com o autor e do livro, e, adicionalmente, tem um campo de URL.

Esta solução funciona, mas por algum motivo o fato de que livro não é diretamente ligado ao Autor está me incomodando. Existe alguma maneira de conseguir esse mesmo efeito ao mesmo tempo, cortando o modelo AuthorBook fora de cogitação?

(Além disso, eu percebo que pode tê-los diretamente relacionado mantendo AuthorBook, mas que parece feio e também redundante.)

(Além disso, eu percebo que eu ainda teria uma tabela author_book SQL. Isso não me incomoda nem um pouco, eu acho que é impossível fazer sem qualquer maneira.)

Obrigado pelo seu tempo! E por favor não me chama !!!

Foi útil?

Solução

Sim, você pode modelar a relação AuthorBook (ou a 'borda', como você imagina-lo).

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

O "with" opção habtm:

Define o nome do modelo para a tabela de junção. Por padrão o CakePHP irá criar automaticamente um modelo para você. Usando o exemplo acima seria chamado RecipesTag. Ao utilizar esta tecla é possível substituir esse nome padrão. A juntar-se modelo de mesa pode ser usado como qualquer modelo "regular" para acessar a tabela de junção diretamente.

Este é o equivalente a "through" do RoR, representado muito bem na esta ilustração

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top