2017-02-07 90 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

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