2017-08-14 88 views
0

我有兩個單獨的實體,我想通過一對多關係鏈接。但是我希望這種關係是有序的,這意味着每次我打電話給第一個實體時,第二個實體的元素都是以預定義的方式來進行的。我不能使用'order by'調用,因爲這個順序與第二個實體的字段無關。我想到了具有第一實體的一個領域是實體的陣列,但我不知道如何實現,要麼..Symfony:訂購一對多關係

編輯

到目前爲止,我有這樣的事情:

/** 
* @ORM\OneToMany(targetEntity="FusionDesign\BlogBundle\Entity\Element", mappedBy="page") 
*/ 
private $elements; 

/** 
* @ORM\ManyToOne(targetEntity="FusionDesign\BlogBundle\Entity\Page", inversedBy="elements") 
* @ORM\JoinColumn(name="page_id", referencedColumnName="id") 
*/ 
private $page; 

我知道,我可以把「ORDER BY無論ASC」的地方在那裏,但是,根據一個山坳訂單元素中的元素,這不是我所需要的,因爲元素實體和頁面實體永遠不會同時持續存在,也不會被相同的過程持久化。我想要做的是構建一個基本的CMS,用戶可以生成新的頁面。首先選擇頁面可能具有的元素類型(如標題圖片,橫幅,標題等),並根據這些選擇持續使用描述html,路由和控制器內容的元素的元素實體。然後,在創建新頁面時,讓用戶選擇按順序排列這些潛在元素,並按照反映所需佈局的順序綁定元素實體。

我想到有這樣的事情

/** 
* @var array 
* 
* @ORM\Column(name="structure", type="array") 
*/ 
private $structure; 

凡數組存儲元素實體,但我不知道該怎麼做。

+0

怎樣的,要責令這些實體?通過一些什麼領域? –

+0

你能寫下你的編碼嗎? –

回答

0

您只需要在關係的doctrine的映射配置中定義orderBy屬性。

YAML映射示例:

'Example\Entity\Article': 
    # [..] 
    oneToMany: 
    images: 
     targetEntity: 'Example\Entity\Article\Image\ArticleImage' 
     mappedBy: 'article' 
     orderBy: # <--- here 
     position: 'ASC' 
+0

我不能讓訂單由第二個實體中的列確定。沒有辦法通過其他方式來定義更靈活的訂單,還是應該依靠第三方實體 – Afunakwa