Ich habe ein Paar von Assoziationen. Sie sind viele-zu-viele und ich verwende eine explizit erstellte Entität, um sie zu verbinden, damit ich Metadaten über die Beziehung haben kann. Obwohl sie identisch sind, funktioniert das eine und das andere nicht. Schlimmer noch, letzte Woche haben beide gearbeitet und ich habe sie seitdem nicht mehr berührt. In der MuSQL Workbench kann ich die richtigen Daten auswählen.Doctrine PersistentCollection kann nicht für eine meiner Entitäten verwendet werden, eine andere kann ich
Wenn ich Daten in ein Array für eins extrahiere, ist das Leben gut. Wenn ich für die anderen versuchen, erhalte ich:
Anruf auf eine Elementfunktion
setValue()
auf einem Nicht-Objekt
ich es auch, wenn ich zu count()
es versuchen, Zugang it ($blah[0]
) oder Iteriere darüber (foreach
).
Wenn ich ausführen:
echo get_class($inData)."<BR>";
echo get_class($inData->accountPurchaseNodes)."<BR>";
echo get_class($inData->accountPurchaseNodes[0])."<BR>";
echo "<HR>";
echo get_class($inData)." x<BR>";
echo get_class($inData->purchaseOrderNodes)."<BR>";
echo get_class($inData->purchaseOrderNodes[0])."<BR>";
echo "<HR>";
exit;
ich:
GE\Entity\Purchase
Doctrine\ORM\PersistentCollection
GE\Entity\AccountPurchaseNode
GE\Entity\Purchase
Doctrine\ORM\PersistentCollection
(!) Fatal error: Call to a member function setValue() on a non-object in
/Users/tqwhite/Documents/webdev/goodEarth/goodearth.com/library/
Doctrine/ORM/PersistentCollection.php on line 168
Unten I umfassen die relevanten Teile der Entity-Definitionen. Ich habe Stunden damit verbracht, dies und das zu versuchen. Ich werde immens dankbar für Ihre Vorschläge sein.
Dies funktioniert:
//==Purchase Entity=====================================
/**
* @param \Doctrine\Common\Collections\Collection $property
* @OneToMany(targetEntity="AccountPurchaseNode", mappedBy="account", cascade={"persist", "remove"});
*/
private $accountPurchaseNodes;
//in __construct()
$this->accountPurchaseNodes = new \Doctrine\Common\Collections\ArrayCollection();
//==AccountPurchaseNode Entity=====================================
/**
*
* @ManyToOne(targetEntity="Purchase", cascade={"all"}, fetch="EAGER")
* @JoinColumn(name="purchaseRefId", referencedColumnName="refId")
*
**/
private $purchase;
/**
*
* @ManyToOne(targetEntity="Account", cascade={"all"}, fetch="EAGER")
* @JoinColumn(name="accountRefId", referencedColumnName="refId")
*
**/
private $account;
//==Account Entity=====================================
/**
* @param \Doctrine\Common\Collections\Collection $property
* @OneToMany(targetEntity="AccountPurchaseNode", mappedBy="purchase", cascade={"persist", "remove"});
*/
private $accountPurchaseNodes;
//in __construct()
$this->accountPurchaseNodes = new \Doctrine\Common\Collections\ArrayCollection();
Dies nicht
//==Purchase =====================================
/**
* @param \Doctrine\Common\Collections\Collection $property
* @OneToMany(targetEntity="PurchaseOrderNode", mappedBy="purchases", cascade={"persist", "remove"});
*/
private $purchaseOrderNodes;
//in __construct()
$this->purchaseOrderNodes = new \Doctrine\Common\Collections\ArrayCollection();
//==PurchaseOrderNode =====================================
/**
*
* @ManyToOne(targetEntity="Purchase", cascade={"all"}, fetch="EAGER")
* @JoinColumn(name="purchaseRefId", referencedColumnName="refId")
*
**/
private $purchase;
/**
*
* @ManyToOne(targetEntity="Order", cascade={"all"}, fetch="EAGER")
* @JoinColumn(name="orderRefId", referencedColumnName="refId")
*
**/
private $order;
//==Order =====================================
/**
* @param \Doctrine\Common\Collections\Collection $property
* @OneToMany(targetEntity="PurchaseOrderNode", mappedBy="order", cascade={"persist", "remove"});
*/
private $purchaseOrderNodes;
//in __construct()
$this->purchaseOrderNodes = new \Doctrine\Common\Collections\ArrayCollection();
Gelöst !! Es war ein Fehler in einer referenzierenden Entität (Käufe). Es heißt mappedBy = "Käufe". Es sollte "Kauf" sein. Bitte beachten Sie, dass die Folgen dieses Fehlers nicht möglich waren. Es erzeugte eine riesige Datenstruktur, die nicht in fast jeder nützlichen Weise aufgelistet werden konnte. Es gab bizarre Ergebnisse bei Berührung. – tqwhite
Vielleicht sollte ich sagen, um googles willen, und Klarheit, _die Lösung für dieses Problem war, dass der Feldname mappedBy incorrect._ Es stimmte nicht mit dem tatsächlichen Namen in der Zieleinheit (in diesem Fall, Fehler in der Bestellung Entität falsch geschrieben Name der Zielverknüpfung in PurchaseOrderNodes). Es wurde aufgrund der Namenskonvention der Plural Tabellennamen viel schwieriger zu sehen. Passen Sie auf diese Beugung auf !! – tqwhite
Wie hast du das am Ende gefunden? Ich finde es sehr schwer, meine Entitäten zu debuggen, das könnte mein Problem sein, aber woher weiß ich das? – Andre