2014-09-02 88 views
0

我正在與三個實體之間的Doctrine映射工作,一些疑惑來到我身上。這些實體是Natural,LegalOrders,其中一個Natural可以具有許多Orders並且一個Legal也可以具有許多Orders。因此,在Natural實體我有Orders一個OneToMany雙向關係是這樣的代碼:處理在實體中的Doctrine2映射/關係

/** 
* @ORM\OneToMany(targetEntity="Orders", mappedBy="natural") 
*/ 
protected $orders; 

public function __construct() 
{ 
    $this->orders = new ArrayCollection(); 
} 

然後在Orders實體我有這樣的:

/** 
* @ManyToOne(targetEntity="NaturalPerson", inversedBy="orders") 
* @JoinColumn(name="natural_id", referencedColumnName="id") 
**/ 
protected $natural; 

這裏是我的疑惑:

  • 由於我有第三個實體:Legal我應該按照相同的步驟來建立之間的關係和Orders
  • 這不是一個嚴重的不一致,留下一個空的列,因爲Orders屬於NaturalLegal但不是他們兩個?
  • 我如何保存Orders?我應該先沖洗並堅持Orders第一次然後設置對象LegalNatural所以方法setOrder()應該在NaturalLegal對不對?

希望任何能幫助我理解這一點,並在此先感謝

建議DB模式

這裏是DB模式,我現在有胡麻,它是可以改變

enter image description here

+1

它最好有2個實體爲'NaturalOrders'訂單1和其他的'LegalOrders'作爲自然人和法人不屬於彼此,那麼爲什麼它們相關聯的訂單應當由單'Orders'實體保持覺得這方式 – 2014-09-02 05:32:10

+0

請問你的商業模式是有意義的自然人和法人,從相同的基本實體獲得?這樣一來,你的訂單實體將代替已經'保護orderType'其'targetEntity =「baseOrderType」' – Alex 2014-09-02 05:52:14

+0

@MKhalidJunaid具有模型作爲我的主離開後,你有什麼建議嗎?你可以用一些示例代碼來回答一個問題以獲得想法嗎? – ReynierPM 2014-09-02 12:19:33

回答

1

由於我有第三個實體:Legal應該遵循相同的程序爲了使法律和訂單之間的關係?

是的,它的工作原理。

這不是一個嚴重的不一致,因爲訂單屬於自然或法律而不是兩者都留下一個空的列嗎?

嚴重嗎?沒有!也許是一個小,但簡單也容易維護,所以是KISS。

我如何保存訂單?我應該先刷新並堅持訂單,然後將對象設置爲Legal或Natural,以便setOrder()方法應該是Natural和Legal的權利?

只有持久性是必需的,你可以在最後刷新所有。