CakePHP hasAndBelogsToMany utilizzando save () vs. saveAll ()
-
02-07-2019 - |
Domanda
Sto usando un database molto intrinseco con un'applicazione CakePHP e finora le mie visualizzazioni e controller multi-modello funzionano bene. Ho una tabella singolare ( Entity
) che ha il suo id
su molte altre tabelle come la chiave esterna entity_id
Alcune tabelle sono relazioni uno a uno (come una Azienda
è una Entity
) e alcune sono una a molte ( Entity
può avere diverse Indirizzi
) e così via.
Non voglio / non posso cambiare il modello di database , quindi questa è la struttura.
Ho usato saveAll ()
per salvare i dati su quelle tabelle con nomi di input come:
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 il mio salvataggio tutto sta facendo tutto il duro lavoro, INIZIA TRANSAZIONE
, tutti i INSERISCI
e un COMMIT
finale ...
Ma ora ho creato un EntityCategory
che è una relazione da n a n e ho creato la relazione completa HABTM
all'interno del modello.
Funziona quando lo save ()
ma solo la relazione HABTM
, e salva tutto quando uso saveAll ()
(solo come prima) ad eccezione della relazione HABTM
.
Mi sto perdendo qualcosa? Come faccio a farlo funzionare correttamente? Oggi sto usando il seguente codice:
if (!empty($this->data)) {
$this->Entity->saveAll($this->data);
$this->Entity->save($this->data);
}
Il saveAll ()
salva tutti i dati in più tabelle, salva l'id in Entity- > id
e salva il save ()
le relazioni HABTM
, ma non sono sicuro che sia corretto o che mi possa causare problemi se cambio una struttura / modello.
È questo il modo migliore per usarlo? Esiste un modo corretto per salvare le relazioni all'interno di CakePHP? Cosa può dirmi la tua esperienza / conoscenza?
Soluzione
Questo problema è stato risolto se si scarica nightly .
Attenzione però, qualcos'altro potrebbe rompersi.
Altri suggerimenti
Il problema con le associazioni saveAll () e HABTM è un noto CakePHP issue e presenta non è stato risolto a partire da 1.2 RC2.
Per quanto riguarda le migliori pratiche per il salvataggio dei dati dei modelli correlati, secondo CakePHP ricettario :
" Quando si lavora con modelli associati, è importante rendersi conto che il salvataggio dei dati del modello deve essere sempre eseguito dal modello CakePHP corrispondente. Se stai salvando un nuovo post e i relativi commenti associati, utilizzeresti entrambi i modelli Post e Comment durante l'operazione di salvataggio. & Quot;
Tuttavia, l'utilizzo di saveAll () e save () dovrebbe funzionare e IMHO è una soluzione più flessibile / generica.