2013-04-14 92 views
5

我有一個實體'上市'與OneToMany實體'視圖',這些之間的關鍵是view.content_id它擁有列表的ID,但是,它也涉及到其他實體,所以通過添加Doctrine2 OneToMany without mappedBy

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

要認爲它剎車,因爲保存視圖實體時的content_id變爲零。

我該如何解決?上列出側

關聯:

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

我正在通過加入Listing.views並添加WITH CONTENT_TYPE =查詢:其中的ContentType判別一些 '視圖' 的結果。

+0

您收到的錯誤不會告訴您使用'cascade = {「persist」}'? – cheesemacfly

+0

沒有錯誤,這是一種有效的方法。但是,當保存「視圖」時,content_type字段將變爲空,因爲有兩個註釋指向此列。 – Paxton

+0

通常不需要第二個'JoinColumns'或'JoinColumn'註釋,因爲有一個'owner'和一個'inverse'側面。我的猜測是,你的代碼中的那些註釋正在引起某種衝突,所以Doctrine無法解析哪個網站是什麼... –

回答

0

我很晚很晚參加派對,但是我想我會回答以防別人幫助別人。

由於您在兩個實體之間建立的關係,您現在必須將對象指定給該屬性,而不是FK值本身。像這樣:

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

而不是:

$view->setListing($content_id); 

當然,如果它原來是別的東西,我很好奇,想知道。

:^)

+0

不幸的是沒有。解決方案是使用繼承映射/鑑別器。 – Paxton

相關問題