Symfony / Doctrine ManyToMany получают записи в порядке их назначения или сохранения - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть объект с именем Item, который имеет соединение ManyToMany с JoinTable к объекту с именем Tags

Это работает хорошо.Проблема в том, что мне нужны теги в точном порядке, как они были выбраны, а не отсортированы по идентификатору тега, поскольку я получаю их сейчас, когда вызываю getTags () для класса Item.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 14 февраля 2019

Используйте таблицу соединений, чтобы определить этот порядок.

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
}
...