2013-04-14 11 views
5

Ich habe eine Entität 'Listung' mit OneToMany zu Entität 'view', der Schlüssel zwischen diesen zu ist view.content_id, die die ID der Auflistung enthält, aber es bezieht sich auch auf andere Entitäten, also durch HinzufügenDoctrine2 OneToMany ohne mappedBy

/** 
* @var Listing 
* 
* @ORM\ManyToOne(targetEntity="\Acme\Bundle\Entity\Listing", inversedBy="views") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="content_id", referencedColumnName="id") 
* }) 
*/ 
private $listing; 

Zur Ansicht bremst es, weil die content_id beim Speichern der View-Entity null wird.

Wie kann ich es beheben?

Relation auf Auflisten Seite:

/** 
* @var views 
* 
* @ORM\OneToMany(targetEntity="\Acme\Bundle\Entity\View", mappedBy="listing") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="id", referencedColumnName="content_id") 
* }) 
*/ 
private $views; 

Ich mache Anfragen durch die Listing.views Verbinden und das Hinzufügen von MIT content_type =: Contenttype, die einige 'view' Ergebnisse diskriminiert.

+0

Der Fehler, den Sie bekommen, sagt Ihnen nicht, 'cascade = {" persist "}' 'zu verwenden? – cheesemacfly

+0

Es gibt keinen Fehler, dies ist ein gültiger Ansatz. Beim Speichern von 'view' wird das Feld content_type jedoch null, da zwei Anmerkungen auf diese Spalte verweisen. – Paxton

+0

Normalerweise ist keine zweite 'JoinColumns' oder' JoinColumn' Annotation notwendig, da es eine "Eigentümer" und eine "inverse" Seite gibt. Meine Vermutung ist, dass diese Annotation in Ihrem Code eine Art von Konflikt verursacht, so dass Doctrine nicht auflösen kann, welche Site was ist ... –

Antwort

0

Ich komme ziemlich spät zur Party, dachte aber, ich würde antworten, falls es jemand anderem hilft.

Aufgrund der Beziehung, die Sie zwischen den beiden Entitäten hergestellt haben, müssen Sie nun der Eigenschaft Objekt und nicht dem FK-Wert selbst zuweisen. Wie so:

$listing = $em->getRepository('Acme\Bundle\Entity\Listing') 
       ->find($content_id); 
$view->setListing($listing); 

Und nicht:

$view->setListing($content_id); 

Natürlich, wenn es stellte sich heraus, etwas anderes zu sein, würde ich neugierig sein, zu wissen.

: ^)

+0

Leider nicht. Die Lösung war die Verwendung von Vererbung Mapping/Diskriminatoren. – Paxton

Verwandte Themen