Symfony 2 Doctrine 通过 id 的有序数组查找
Posted
技术标签:
【中文标题】Symfony 2 Doctrine 通过 id 的有序数组查找【英文标题】:Symfony 2 Doctrine find by ordered array of id 【发布时间】:2015-04-18 06:44:32 【问题描述】:我正在寻找一种在Symfony 2
中使用Doctrine
的方法来使用有序的id 数组查找项目。
我有一个带有 id(主键)和标题的 Card 实体。
我有一个带有 id(主键)的 ListCards 实体和一个 listCards(一个编码的 id 数组:["16", "2", "84"]
)
我首先获取列表,然后我需要按顺序查找具有这些 ID 的卡片。
我尝试类似:
$idsArray = ["16", "2", "84"];
$cardRepository->findby($idsArray);
但是Doctrine
按ASC
的顺序取我的卡片。
ORDER BY FIEDS
sql方法好像不被学说支持。
这种排序有什么简单的解决方案吗?
谢谢(对不起我的英语不好)。
【问题讨论】:
【参考方案1】:您可以创建一个帮助表,在其中存储有序组元素,其中包含以下数据:(group_id, card_id, order)
您按group
_id 搜索,按order
排序并阅读card_id
。
【讨论】:
谢谢。我会尝试这样的事情。太糟糕了 findBy 学说方法中除了 ASC 或 DESC 之外没有排序参数。【参考方案2】:你可以像这样使用它:
$cardRepository->findBy( array('id' => $idsArray), array('id' => 'DESC') );
还请查看the official doctrine documentation,了解有关如何在findBy
方法中使用排序、限制和偏移作为第二到第四个参数的更多详细信息。
【讨论】:
感谢您的回答,但我不想要 DESC 订单,而是我的数组订单。而且我在“findBy”方法中找不到任何允许这种功能的参数。 您可以将数组 $idsArray 和带有实体的数组发送到树枝。然后你可以对 $idsArray 使用循环。 我无法直接在 Doctrine 中执行此操作,但这是一种从 Postgres 获取指定排序(本例中为 4、7、1、6)的方法:select * from my_table join unnest('4,7,1,6'::varchar[]) with ordinality o(my_id, ord) on o.my_id = my_table.my_id order by ord asc;
以上是关于Symfony 2 Doctrine 通过 id 的有序数组查找的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2 - Doctrine 2 - Native Sql - 删除查询
Symfony 3 - Doctrine 2 - 在 oneToMany 关系上的 orderBy 不起作用
Symfony / Doctrine:OneToMany插入导致null id
如何在 Doctrine2 (Symfony2) 中按案例排序