私は一対の関連があります。それらは多対多であり、明示的に作成されたエンティティを使用してそれらを結合するので、関係に関するメタデータを持つことができます。それらは同一であるが、一方は動作し、他方は動作しない。さらに悪いことに、先週、彼らは働いていたので、私はそれらに触れていません。 MuSQL Workbenchでは、正しいデータを選択できます。私のエンティティの1つにDoctrine PersistentCollectionを使用することはできません。もう1つは
データを1つの配列に抽出すると、人生は良いです。私は他のためにしようとすると、私が手:
非オブジェクトのメンバ関数setValue()
へ
コール
私はcount()
にそれをしようとすると、私もそれを得る、アクセスも($blah[0]
)またはそれを反復する(foreach
)。私は実行
:
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;
私が取得:
以下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
、私はエンティティ定義の関連部分が含まれます。私はこれとそれを試して時間を焼いた。私はあなたの提案に非常に感謝します。
THIS ONEワークス:
//==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();
THIS ONEは、それが参照するエンティティpurchases
でエラーではありません
//==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();
SOLVED !!これは参照元エンティティ(購入)のエラーでした。 mappedBy = "購入"と表示されます。それは '購入'でなければなりません。このエラーの結果は不可能であったことに注意してください。これは、ほとんど有用な方法ではリストできなかった巨大なデータ構造を作り出しました。それは触れたときに奇妙な結果をもたらした。 – tqwhite
私は、Googleのために、この問題の解決策として、mappedByフィールド名が間違っていたということを言います。_ターゲットエンティティの実際の名前と一致しませんでした(この場合、購入エンティティスペルミスのエラーPurchaseOrderNodesのターゲット関連付け名)。複数の表名の命名規則のため、見るのがはるかに難しくなっています。その変態に注意してください! – tqwhite
どうやってそれを見つけましたか?私はエンティティをデバッグするのが非常に難しいと思っていますが、これは私の問題かもしれませんが、どうすればわかりますか? – Andre