在使用Doctrine进行了一对多的映射,如一个人(Person),有多个小孩(Children),希望在使用Doctrine自动获取Children时,小孩能按年龄大小排序。
请问:要重载哪个函数才能实现呢?persion->getChildren()调用了哪个函数进行SQL查询呢?
这样的需求,很难搜索到结果,求前辈指点。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
解决方案如下:
修改
Person类的getChildren方法如果不想修改
getChildren方法,可以写一个新的方法getChildrenOrderedByAge,道理同上。总结:
Doctrine的一对多或者多对多关系中,Entity中所谓多的属性是Doctrine\Common\Collections\Collection接口的某一实现的实例,默认情况下是Doctrine\Common\Collections\ArrayCollection,上述解决方案中用到的就是这一接口的Filtering API(筛选接口),上述情况下,筛选的条件会最终转化到SQL层进行处理,以达到性能优化的目的。最后,相关官方文档链接如下:Filtering Collections
使用 @vinzao 的方式没问题,不过 Doctirne 是提供了
OrderBy方法的:Person:
Children: