mi hanno le seguenti associazioni nel mio database (versione semplificata):chiave composita e la forma
Questa è una relazione molti-a-molti, ma con un attributo sul tavolo che unisce, in modo I have to use One-To-Many/Many-To-One associations.
Ho una forma in cui posso aggiungere il numero di relazioni come voglio un articolo di ordine e creare allo stesso tempo (principalmente ispirato al How to Embed a Collection of Forms esercitazione dalla documentazione.
Quando inserisco il modulo, ottengo il seguente errore:
Entity of type TEST\MyBundle\Entity\Relation has identity through a foreign entity TEST\MyBundle\Entity\Order, however this entity has no identity itself. You have to call EntityManager#persist() on the related entity and make sure that an identifier was generated before trying to persist 'TEST\MyBundle\Entity\Relation'. In case of Post Insert ID Generation (such as MySQL Auto-Increment or PostgreSQL SERIAL) this means you have to call EntityManager#flush() between both persist operations.
capisco questo errore perché dottrina cerca di mantenere l'oggetto Relation
(s) relativo all'ordine da quando ho la possibilità cascade={"persist"}
sul rapporto OneToMany
Ma come posso evitare questo comportamento. ?
Ho provato a rimuovere cascade={"persist"}
e manualmente persisto l'entità, ma ottengo lo stesso errore (perché ho bisogno di flush()
ordine per ottenere l'ID e quando lo faccio, ho lo stesso messaggio di errore).
Ho anche provato a detach()
gli oggetti Relation
prima dello flush()
ma senza fortuna.
Hai ragione, sto cercando di aggiungere un ordine e la relazione da contattare allo stesso tempo. Ho provato a svuotare l'ordine prima, ma poi ho ricevuto l'errore sulla necessità di un 'cascade = {" persist "}' e se lo rimetto tenta di salvare prima la relazione. Hai un esempio funzionante da qualche parte? Non riesco a trovarne uno ... – cheesemacfly
è necessario mantenere manualmente le relazioni. Tutto il 'cascade = {" persist "}' fa è se si mantiene un'entità con una relazione con quello impostato aggiungerà automaticamente '$ em-> persist ($ relationshipObject)' Quindi per risolvere il problema è necessario lasciarlo disattivare e mantenere manualmente gli oggetti relazione ed eseguire un secondo svuotamento. –
Ma se provo a rimuovere 'cascade = {" persist "}' e poi persisto/svuota per primo l'oggetto order, ottengo a: 'Una nuova entità è stata trovata attraverso la relazione 'TEST \ MyBundle \ Entity \ Orders # relations' non è stato configurato per le operazioni persistenti in cascata per l'entità: TEST \ MyBundle \ Entity \ Relations ... '. Ho anche provato a usare 'detach()' sull'oggetto relazioni ma senza successo ... – cheesemacfly