2016-06-15 32 views
3

ich folgendes Problem bekam verhindern:Wie Löschung durch den EntityManager (Lehre Assocation)

i eine Entität Anfrage habe ein mit One-To-One, Unidirectional Association Kunde:

/** 
* @var Customer 
* 
* @ORM\OneToOne(targetEntity="Customer", cascade={"persist"}, fetch="EAGER") 
* @ORM\JoinColumn(name="Customer", referencedColumnName="id", onDelete="SET NULL", nullable=true) 
*/ 
protected $customer; 

Wenn ich den Kunden über DB Backend (PhpMyAdmin) lösche, dann ist alles in Ordnung: das Feld Kunde wird auf Null gesetzt, aber wenn ich das Customer-Objekt mit dem EntityManager lösche, dann wird auch die Anfrage gelöscht, warum?

$em = $this->getDoctrine()->getManager(); 
$em->remove($customer); 
$em->flush(); 

Ich möchte nur auf null setzen.

Sorry für mein schlechtes Englisch, ich hoffe, jemand helfen kann;)

Viele Grüße

+0

Ist diese Antwort irgendeinen Gebrauch zu Ihnen? http://stackoverflow.com/questions/12471715/how-exactly-to-use-ondelete-set-null-doctrine2 – Richard

+0

Nein ... Ich habe bereits onDelete = "SET NULL" gesetzt. Es funktioniert auf DB, aber wenn ich mit EntityManager lösche, wird das Anfrage-Objekt auch gelöscht, und ich möchte das verhindern ... – knete

Antwort

1

Sie die Zuordnung falsch mit Anmerkungen versehen. Versuchen Sie diese

/** 
* @ORM\ManyToOne(targetEntity="Customer") 
* @ORM\JoinColumn(name="customer_id", referencedColumnName="id", onDelete="SET NULL") 
*/ 
protected $customer; 
+0

Nein, das ist falsch, ich bekomme den Fehler: Ungültige Fremdschlüsselaktion: PERSIST. onDelete = "SET NULL" ist genau das, was ich will, aber stattdessen das gesamte Anfrageobjekt gelöscht wird. – knete

+0

Siehe die Änderungen .. @ knete –

+0

Das Anfrageobjekt wird immer noch gelöscht, wenn ich das Objekt Customer durch den EntityManager löschen – knete