为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony 4 排序过滤数组集合

Symfony 4 排序过滤数组集合

PHP
慕神8447489 2021-11-26 15:08:11
我无法对已过滤的一对多关系产生的集合进行排序。我有一个测验有问题:class Quiz{/** * One quiz has many questions. This is the inverse side. * @ORM\OneToMany(targetEntity="Question", mappedBy="assessment") * @ORM\OrderBy({"num" = "ASC"}) */ private $questions; public function __construct() {    $this->questions = new ArrayCollection(); }这按预期工作。但是,当我修改 getter 以排除非活动(软删除)问题时,排序顺序丢失。public function getQuestions(){    // filter to never return soft deleted questions    $criteria = Criteria::create()->where(Criteria::expr()->eq("active", true));    return $this->questions->matching($criteria);}事实上,有了这个 getter,如果我将 order by 子句修改为一个不存在的列,我不会像我期望的那样得到无法识别的字段异常:@ORM\OrderBy({"nonexistantcolumn" = "ASC"}) 这让我相信标准过滤以某种方式覆盖了注释。任何有关如何解决此问题的想法将不胜感激。
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

除了过滤,Criteria还可以对集合进行排序:


public function getQuestions()

{

    // filter to never return soft deleted questions

    $criteria = Criteria::create()

        ->where(Criteria::expr()->eq("active", true))

        ->orderBy(["num" => Criteria::ASC]);

    return $this->questions->matching($criteria);

}

但是,请考虑添加另一个未过滤的 getter,因为这将阻止您实际删除非活动元素,或将此逻辑移动到存储库方法。


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信