学说:与身份证的多对多关系

时间:2017-02-07 13:40:56

标签: php mysql symfony doctrine-orm

Doctrine 2多对多 NOT 的关系是否有可能从联接表中获得复合键,而是有 ID列。

A_B

ID
A_ID
B_ID

当前问题是按升序对插入的ID 进行排序,但是我需要它们按照从表单中添加的顺序排列

由于

2 个答案:

答案 0 :(得分:0)

多对多关系并不意味着订购。如果您想订购某些东西,那么您需要将额外的数据引入到连接表中,它将不再是一个连接表,而是一个单独的实体。因此,为了订购关系,您必须定义“加入实体”并为这两个表设置多对一的关系:

Table A            Table AB            Table B
ID                 A_ID                ID
                   B_ID
                   order

AB表与A和B有多对一的关系。

答案 1 :(得分:-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;

和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')