Symfony/Doctrine ManyToMany получают записи в порядке их назначения или сохранения
У меня есть объект с именем Item, который имеет соединение ManyToMany с JoinTable к объекту с именем Tags
Это работает хорошо. Проблема в том, что мне нужны теги в точном порядке, как они были выбраны, а не отсортированы по идентификатору тега, поскольку я получаю их сейчас, когда вызываю getTags() для класса Item. Есть способ сделать это?
1 ответ
Используйте таблицу соединений, чтобы определить этот порядок.
Item_id | Tags_id | Order
--------+---------+------
1 | 1 | 2
1 | 2 | 1 <-- order for tags of item 1
1 | 3 | 3
-------+---------+------
2 | 42 | 1
2 | 1 | 2 <-- order for tags of item 2
-------+---------+------
3 | 3 | 1 <-- order for tags of item 3
... и сущности эквивалентны:
Вы собираетесь из
//MToM : Many To Many
//OToM : One To Many
//MToO : Many To One
[Item] -MToM-> [Tags]
[Tags] -MToM-> [Item]
к
[Item] -OToM-> [ItemTags] -MToO-> [Tags]
[Tags] -OToM-> [ItemTags] -MToO-> [Item]
А в ваших классах сущностей:
class Item
{
// some properties ...
/**
* @OneToMany(targetEntity="ItemTags", mappedBy="Item")
*/
private $ItemTags; //array
//more properties, and get/set
}
class Tags
{
// some properties ...
/**
* @OneToMany(targetEntity="ItemTags", mappedBy="Tags")
*/
private $ItemTags; //array
//more properties, and get/set
}
class ItemTags
{
/**
* @ManyToOne(targetEntity="Item", inversedBy="ItemTags")
* @JoinColumn(name="Item_id", referencedColumnName="id")
* ^-----^-------------------------^^---- Make sure to use the same than in your table !
*/
private $Item; // single Item
/**
* @ManyToOne(targetEntity="Tags", inversedBy="ItemTags")
* @JoinColumn(name="Tags_id", referencedColumnName="id")
* ^-----^-------------------------^^---- Make sure to use the same than in your table !
*/
private $Tags; // single Tags
private $Order;
// get/set and stuff
}