Symfony:订购一对多的关系

时间:2017-08-14 14:57:55

标签: symfony doctrine

我想要通过一对多关系链接两个独立的实体。但我希望这种关系是有序的,这意味着每次我调用第一个实体时,第二个实体的元素都是以预先订购的方式进行的。我不能使用'order by'调用,因为这个顺序与第二个实体的字段无关。我想过让第一个实体的一个字段是一个实体数组,但我不知道如何实现它......

修改

到目前为止,我有这样的事情:

/**
 * @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”,但是根据Element中的一个列进行排序,这不是我需要的,因为Element实体和Page实体永远不会持久存在时间,也不是同一个过程。我想要做的是构建一个基本的CMS,用户可以在其中生成新页面。首先选择页面可能具有的元素类型(如标题图像,横幅,标题等),并根据这些选项将元素实体与描述html,路由和控制器内容的字段保持在一起。然后,当创建新页面时,让用户可以选择随意订购这些潜在元素,并按照反映所需布局的顺序绑定元素实体。

我想过有这样的事情

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

数组存储Element实体但我不知道如何操作。

1 个答案:

答案 0 :(得分:0)

您只需要在doctrine的关系映射配置中定义orderBy属性。

YAML映射示例:

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