Pergunta

Eu estou usando um banco de dados muito intrínseca com uma aplicação CakePHP e muito bem até agora meus multi-modelos visualizações e controladores estão trabalhando. Eu tenho uma tabela singular (Entity) que tê-lo de id em várias outras tabelas como o entity_id Foreign Key

Algumas tabelas são de um para um relacionamento (como uma Company é um Entity) e alguns são de um para muitos (Entity pode ter vários Addresses) e assim por diante.

Eu não vou / não pode alterar o modelo de banco de dados , então esta é a estrutura.

Eu tenho usado saveAll() para salvar dados sobre as tabelas com nomes de entrada como:

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

e meu save tudo está fazendo todo o trabalho duro, BEGIN TRANSACTION, todos INSERTs e uma COMMIT última ...

Mas agora eu criei um EntityCategory que é um n para n relação e criou a relação HABTM completo dentro do modelo.

Ele funciona quando eu save()-lo, mas apenas a relação HABTM, e ele salva Everthing quando eu uso saveAll() (como antes), exceto para a relação HABTM.

Estou faltando alguma coisa? Como eu fazer este trabalho corretamente? Eu estou usando o seguinte código hoje:

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

O saveAll() salva todos os dados em várias tabelas, salva o id em Entity->id eo save() salva as relações HABTM, mas eu não tenho certeza se ele está correto ou se ele pode me trazer problemas se eu mudar alguma estrutura / modelo.

Esta é a melhor maneira de usá-lo? Existe um correta maneira de economizar que as relações dentro CakePHP? Qual a sua experiência / conhecimento pode me dizer?

Foi útil?

Solução

Este é fixo se você baixar o noturno .

Seja embora cuidadosa, outra coisa pausa poder.

Outras dicas

O problema com saveAll () e associações HABTM é um conhecido CakePHP questão , e tem não foi resolvido a partir de 1,2 RC2.

Como fas como melhores práticas para salvar dados modelo relacionado vai, de acordo com o CakePHP livro de receitas :

"Ao trabalhar com modelos associados, é importante perceber que salvar dados do modelo deve ser feito sempre pelo modelo CakePHP correspondente. Se você está salvando um novo Post e seus Comentários associados, então você deve usar os dois modelos comentário Poste e durante a operação de salvamento ".

No entanto, usando saveAll () e save () deve funcionar, e IMHO é uma solução mais flexível / generic.

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