【问题标题】:Doctrine ODM: get array of specific fieldsDoctrine ODM:获取特定字段的数组
【发布时间】:2017-08-06 14:44:34
【问题描述】:

所以,问题是在一个数组中获取 ids(或任何其他字段),例如:

[
    "someId1",
    "someId2",
    "someId3",
]

我试图通过下一个查询来接受它:

$this->createQueryBuilder()
        ->select('_id')
        ->hydrate(false)
        ->getQuery()
        ->toArray()

但我拿的不是我想要的,而是靠近这个:

112 => array:1 [
  "_id" => 112
]
113 => array:1 [
  "_id" => 113
]
114 => array:1 [
  "_id" => 114
]

(我使用策略增量)。我尝试通过 map、reduce 来做到这一点,但我知道我对这些函数一无所知:)。那么有人可以帮帮我吗?

P.S:我知道如何使用 php 函数来实现这一点,例如 array_keys | array_values。但我真的很想知道如何通过 mongoDB 来做到这一点,特别是在 ODM 中使用 createQueryBuilder

【问题讨论】:

  • 这是 ORM,因此请尝试将其调整为您的 ODM:在 repo public function findIds() { return $this->createQueryBuilder('c') ->select('partial c.{id}') ->getQuery() ->getResult(Query::HYDRATE_ARRAY); } 然后 $ids = $this->yourRepository->findIds(); $result = array_column($ids, 'id'); 在您的服务中。
  • ORM 和 ODM NOT 是一样的。只需阅读该项目核心的文档

标签: php mongodb symfony doctrine-orm doctrine-odm


【解决方案1】:

这通常可以通过创建自定义水合器来完成。你可以看看这个例子,并尝试将它适配到 ODM https://gist.github.com/Tom32i/7984541

【讨论】:

  • ODM 中的水合只有 2 个参数:true, false,这意味着结果是对象视图或数组视图 - 就是这样。所以我认为它没有用的建议。
  • @Nikita_kharkov_ua 你确定吗?那么为什么会有一个 hydrator 接口 doctrine-project.org/api/mongodb_odm/1.0/… 和一个设置 Hydrators 命名空间 docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/… 的选项?
  • 你睁开我的眼睛!但!没有一个使用示例 - 这是 first 重要的事情。 Second - 没有像 ORM setHydrator 这样的方法。只有水合物(真|假)。现在我有与水合类似的任务:使用引用获取对象,并且在引用数组中必须只有 id,而不是完整对象。当然,我可以获取对象并将其映射以获取针值。但我完全确定 mongoDB 支持在自定义表示中获取结果。
猜你喜欢
  • 2011-09-03
  • 2020-02-16
  • 1970-01-01
  • 2017-11-14
  • 2017-08-13
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多