2017-02-07 94 views
0

關係是有可能在學說2許多一對多關係有從連接表,而是一個複合鍵ID列。學說:許多一對多與ID

A_B

ID 
A_ID 
B_ID 

當前問題是,它下令由升序插入IDS,但我需要他們的順序,他們已經從形式加入

謝謝

+3

當人們想要通過主鍵進行訂購時,總是有點可疑。無論如何,如果默認行爲不適合,則創建您自己的連接實體並與其他兩個實體建立多對一的關係。但坦率地說,如果一個實體的排序很重要,那麼添加你自己的排序列。 – Cerad

+0

我建議爲此添加一個自動時間戳列,並使用時間戳對結果進行排序。 – Wilt

回答

0

多對多關係並不意味着排序。如果你想訂購一些你正在向連接表引入額外數據的東西,它不再是一個連接表,而是一個單獨的實體。因此,爲了訂購關係,你必須定義「加入實體」,並設置多到一個realations像兩個表:

Table A   Table AB   Table B 
ID     A_ID    ID 
        B_ID 
        order 

與AB表有許多一對一關係A和B

-1

是有可能

Table A   Table AB   Table B 
ID     ID 
        A_ID    ID 
        B_ID 
        order 

在一個實體,你應該定義:

/** 
* @ORM\ManyToMany(targetEntity="\YourNameSpace\Model\Entities\B",fetch="EXTRA_LAZY") 
* @ORM\JoinTable(
*  name="AB", 
*  joinColumns={ 
*   @ORM\JoinColumn(name="B_ID", referencedColumnName="A_ID") 
*  }, 
*  inverseJoinColumns={ 
*   @ORM\JoinColumn(name="B_ID", referencedColumnName="ID") 
*  } 
*) 
*/ 
protected $B; 

一ND B中的實體:

/** 
* @ORM\ManyToOne(targetEntity="\YourNameSpace\Model\Entities\A", inversedBy="AB", fetch="EXTRA_LAZY") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="A_ID", referencedColumnName="ID") 
* }) 
*/ 
protected $A; 

但如果你的主要問題是隻排序,你可以創建字段添加到您的表和排序了。

->orderBy('AB.created', 'DESC') 
+0

在某些時候,你應該嘗試一下你的建議。我懷疑你會意識到,許多關係學說不能有其他屬性。向下投票相應。 – Cerad

+0

我在我的項目中使用它,它工作得很好。 –