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?

È stato utile?

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.

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