Ciao, ho un problema quando provo a rimuovere le entità in una relazione OneToMany. Dopo alcune ore di debug, ho provato a eseguire il downgrade della dottrina dall'ultima 2.1.2 alla 2.0.2 e improvvisamente inizia a funzionare.Doctrine 2.0 vs 2.1 cascade remove OneToMany
Immaginare due entità Società e indirizzo in relazione 1: N.
/**
* @Entity
*/
class Company extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Collection
* @OneToMany(targetEntity="Address",mappedBy="company", cascade={"persist","remove"})
*/
private $addresses;
}
/**
* @Entity
*/
class Address extends Entity
{
/**
* @var integer
* @id @Column(type="integer")
* @generatedValue
*/
private $id;
/**
* @var Company
* @ManyToOne(targetEntity="Company", inversedBy="addresses")
* @JoinColumn(name="company_id", referencedColumnName="id",nullable=false)
*/
private $company;
}
quando provo a rimuovere l'entità Società, vorrei che anche gli indirizzi assegnati venissero rimossi.
$em->remove($company);
$em->flush();
Nella doc. 2.1.2 la cancellazione degli indirizzi non viene eseguita, quindi il vincolo di integrità fallisce. Nella versione 2.0.2 funziona perfettamente. Se io uso l'estensione EntityAudit https://github.com/simplethings/EntityAudit, LogRevisionListener esegue il versioning corretto degli indirizzi entity (impostarli revtype = DEL) nella doc. 2.1.2 (ovviamente anche in 2.0.2) ma UnitOfWork non lo rimuove.
C'è qualche differenza su come gestire la rimozione a cascata in 2.0.2 e in 2.1.2?
La ringrazio molto
Oggi sono incappato in questo problema, sto usando 2.1.6. :/ – mokagio
Beh, devo correggermi, ora funziona per me! Stavo usando 'cascade = {" all "}' ma quando l'ho cambiato in 'cascade = {" remove "}' tutto ha iniziato a funzionare bene. – mokagio
Anche se devo dire che probabilmente il mio problema potrebbe non essere completamente dovuto al set di annotazioni o allo stesso Doctrine, perché sto facendo una manipolazione intensiva sulle entità e, dopo qualche test sulla combinazione delle opzioni a cascata, ho scoperto che il L'opzione "unione" era quella che creava problemi. Spero che sia d'aiuto comunque :) – mokagio