Symfony/Doctrine中的ManyToMany按分配顺序排序

7
我有一个名为Game的实体,它与一个名为Question的实体具有ManyToMany连接,并通过JoinTable进行连接。
这个工作得很好。问题是,我需要按照选择的确切顺序获取问题,而不是像现在调用Game类上的getQuestions()时按问题ID排序。
有没有办法做到这一点?
所有问题都使用$game->addQuestion($question);添加。问题已存在,游戏已持久化,在添加问题后。
...
class Game {
    ...
    /**
     * @ORM\ManyToMany(targetEntity="Question")
     * @ORM\JoinTable(name="Games_to_Questions",
     *      joinColumns={@ORM\JoinColumn(name="game_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="question_id", referencedColumnName="id")}
     *      )
     **/
    private $questions;
    ...
}
...
class Question {
    ...
}
...

“they are chosen” 是什么意思? - DonCallisto
用户可以拖放问题并对其进行排序。当他/她选择问题(id)55、30和70时,我希望按照该顺序显示它们。它们按照该顺序添加,但是当我稍后调用它们(在不同的请求上)时,它们的顺序变为30、55、70。 - wawa
好的。为什么不添加一个名为“sorting_order”的字段,并使用Doctrine2的排序功能呢? - DonCallisto
我应该在哪里添加这个字段?是在连接表还是问题表中?问题可以在多个游戏中使用,因此不能在问题上使用排序字段。 - wawa
你可以添加一个带有“游戏”字段的额外表格,它将验证你的游戏并......魔法宝贝 :) - DonCallisto
Derick F的回答就是我在评论中提出的建议 ;) - DonCallisto
1个回答

5

你需要添加一个带有排序列的中间实体。我们将其称为GameQuestion。

/**
 * @ORM\Table(name="game_question")
 * @ORM\Entity(repositoryClass="Gedmo\Sortable\Entity\Repository\SortableRepository")
 */
class GameQuestion {
    private $game;
    private $question;
    /**
     * @Gedmo\SortablePosition
     */
    private $sortOrder;
}

该死!我正在写这个!正确的答案是什么?因为当您需要存储额外数据时,联接表会转换为实体,就像在这种情况下:$sortOrder - manix
这个答案就是我在评论中说的 :) 复制的方式不错,赞一个! :) - DonCallisto
还不知道Gedmo Sortable的东西,看起来很不错!但是从文档(https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sortable.md)中我理解到,我应该将`$game`作为`SortableGroup`,否则它将成为所有连接的排序列表,而不仅仅是每个游戏的列表。 - wawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接