So che ci sono molti post su questo argomento in generale. Sfortunatamente quelli per lo più gestiscono l'effettiva operazione persistente nel database. Nel mio caso ho un problema che si verifica prima dell'operazione di persistenza:Symfony non rimuove l'entità dalla raccolta
Ho un modulo con un (Doctrine) persistenceCollection di entità. Puoi rimuovere "oggetti" dal DOM tramite javascript. Dopo presentare, quando handleRequest viene chiamato sulla forma, la funzione nel mio soggetto è chiamato, che rimuove l'entità della collezione nell'oggetto stesso, e si chiama come posso controllare nel debugger:
/**
* Remove prices
*
* @param \Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices
*/
public function removePrice(\Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices)
{
$this->prices->removeElement($prices);
}
E questa è la definizione di $ prezzi:
/**
* @var
* @ORM\OneToMany(targetEntity="SupplierPrice", mappedBy="priceList", cascade={"all"})
*/
private $prices;
l'idea di base è quello di confrontare l'entità aggiornato con il suo stato precedente, ma dopo che la funzione di cui sopra ha terminato l'entitiy è ancora in collezione.
Per rendere questo più preciso: Se controllo $ questo subito dopo che "removeElement ($ prices)" è passato, contiene ancora l'oggetto che avrebbe dovuto essere rimosso.
Forse questo è importante:
fornitore (entità principale)
- listino prezzi (di proprietà di entità principale - anche entità stessa)
- prezzi (di proprietà del listino, insieme di entità (prezzo articoli)
prezzi è la c ollection di cui l'elemento (prezzo) dovrebbe essere rimosso.
Qualche idea su questo? Posso aggiungere qualsiasi informazione di cui hai bisogno su questa domanda, semplicemente non lo so, quale di essa ha senso, sinceramente ci sono molti carichi.
removeElement funziona solo su un elemento alla volta. I prezzi $ vengono passati a un array o a una singola entità? Chiamarlo $ prezzi invece di $ prezzo è un po 'confuso. – Cerad
La denominazione è causata dalla generazione automatica di codice da parte della dottrina - hai ragione che questo è fonte di confusione. Faccio una soluzione che pubblicherò di seguito, anche se non sono sicuro che potrebbe essere solo una soluzione. – Fuzzzzel