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);

但是DoctrineASC的顺序取我的卡片。

ORDER BY FIEDSsql方法好像不被学说支持。

这种排序有什么简单的解决方案吗?

谢谢(对不起我的英语不好)。

【问题讨论】:

【参考方案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) 中按案例排序

symfony doctrine QueryBuilder到数组结果

Symfony 3.4 - Doctrine多对一返回Object ID但不返回Object本身