我有2个实体。
Mag
Page
具有ManyToMany关系。页面可以附加许多Mags,但我需要允许用户调整Mags的排序顺序。
目前,订单仅基于id
表格中的Page_Mag
所以我需要一个排序字段,但是我需要为每个Page-> Mag关系提供一个排序字段,因为有许多页面可以附加任意数量的标记。
我正在努力让我的头脑绕过这样做的最佳方式,而不会使我的架构大量混乱!
有什么想法吗?
我的注释是:
/**
* @ORM\ManyToMany(targetEntity="Page", mappedBy="magazines" , cascade = {"persist", "remove"})
*/
protected $Page;
和
/**
* @ORM\ManyToMany(targetEntity="Magazine", inversedBy="id" , cascade = {"persist", "remove"})
*/
protected $magazines;
编辑: 为了更好地解释,这就是关系可能是什么样的,其中mags的顺序很重要:
Page_id 1 -> Mag_id:4
-> Mag_id:2
-> Mag_id:1
Page_id 2 -> Mag_id:12
-> Mag_id:1
-> Mag_id:4
等
答案 0 :(得分:1)
我不知道您希望如何对Mags进行排序,但您很可能需要MagRepository Class使用DQL(或SQL,如果您愿意)以您想要的顺序获取所需的实体。然后在控制器中使用该存储库。
编辑:
我想我第一次错了你的问题。
不幸的是,在连接表中获取指定Mag中页面位置的字段无法单独使用注释完成。您需要一个连接实体,它与您的Page和Mag实体具有一对多的关联。
答案 1 :(得分:1)
虽然这不是一个直接的答案,但这就是我解决问题的方法。自定义Twig扩展以在视图中执行排序。
public static function magorder($magazines , $order)
{
$newMagazines = array();
$order = explode(',', $order);
foreach ($magazines as $magazine)
{
$newMagazines[array_search($magazine->getId(), $order)] = $magazine;
}
return $newMagazines;
}
然后在for
:
{{ page.magazines|magorder(page.magorder) }}