CakePHP hasAndBelogsToMany usando save () vs. saveAll ()
-
02-07-2019 - |
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 INSERT
s 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 ??em> maneira de economizar que as relações dentro CakePHP? Qual a sua experiência / conhecimento pode me dizer?
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.