2011-12-13 12 views
7

Ho un'entità società in cui ogni società ha un'altra società madre in una struttura gerarchica ad albero.Symfony2, DoctrineFixturesBundle, impossibile caricare i dispositivi a causa del vincolo di chiave esterna

Tutto funziona correttamente nell'applicazione, quindi sono sicuro che le mie classi Entity sono corrette.

Il problema è, se v'è già contenuto nel database allora fare

doctrine:fixtures:load 

dà questo errore:

[PDOException]                                                            
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails 

Im abbastanza sicuro il problema è che il carico: infissi ha per troncare la tabella, ma non posso ottenere questo errore.

Non sono sicuro di come risolvere questo problema senza hackerare qualcosa in Doctrine per disabilitare i vincoli chiave prima dell'eliminazione. Non è davvero una soluzione a lungo termine.

Le altre relazioni nella struttura dati non causano un problema in quanto la dottrina sembra eliminare l'ordine corretto per evitare i problemi, ma con la tabella aziendale che fa riferimento a se stessi cade.

Ecco la mia entità.

class Company 
{ 
/** 
* @var integer $id 
* 
* @ORM\Id 
* @ORM\Column(name="id", type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @var string $name 
* @ORM\Column(type="string", length=100) 
*/  
protected $name; 

/** 
* @ORM\ManyToOne(targetEntity="Company", inversedBy="children") 
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
*/ 
protected $parent; 

/* other properties here..... */ 

} 

Im utilizzando Symfony 2.0.7 e le ultime dipendenze, e MySQL 5.5

risposta

16

Avevo solo bisogno di impostare correttamente il comportamento di OnDelete.

Il valore predefinito è RESTRICT, che spiega l'errore generato. L'impostazione esplicita su CASCADE o SET NULL consente a doctrine di svuotare la tabella senza errori.

Nel mio caso non volevo rimuovere un genitore per causare la cancellazione dei bambini, quindi ho usato SET NULL in modo che le relazioni sarebbero state semplicemente rimosse.

+0

Ho avuto un messaggio di errore diverso: * L'identificatore [... Questa risposta è stata la soluzione, è ancora valida, tre anni dopo (e con Symfony 2.3.25). Grazie! –

Problemi correlati