Doctrine ODM: получить массив определенных полей

Итак, проблема в том, чтобы получить идентификаторы (или любые другие поля) в одном массиве, например:

[
    "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
]

(Использую стратегию INCREMENT). Я пробовал делать это по map, reduce, но понял, что ничего не знаю в этих функциях :). Так может кто-нибудь мне помочь?

P.S: Я знаю, как реализовать это с помощью функций php, например array_keys | array_values. Но я очень хочу знать, как это сделать с помощью mongoDB, и особенно в ODM с createQueryBuilder.


person Nikita_kharkov_ua    schedule 15.03.2017    source источник
comment
Это ORM, поэтому попробуйте адаптировать его к вашему ODM: в репо 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'); в вашем сервисе.   -  person BentCoder    schedule 15.03.2017
comment
ORM и ODM НЕ - одно и то же. Просто прочтите документацию по сути этого проекта   -  person Nikita_kharkov_ua    schedule 17.03.2017


Ответы (1)


Обычно это можно сделать, создав собственный гидратор. Вы можете взглянуть на этот пример и попробовать адаптировать его к ODM https://gist.github.com/Tom32i/7984541

person Renan Taranto    schedule 16.03.2017
comment
У гидратации в ODM всего 2 параметра: true, false, что означает результат в представлении объекта или в представлении массива - вот и все. Так что я думаю, что это бесполезный совет. - person Nikita_kharkov_ua; 17.03.2017
comment
@Nikita_kharkov_ua Вы уверены? Итак, почему существует интерфейс гидратора doctrine-project.org/api/mongodb_odm/1.0/ и возможность установить пространство имен Hydrators docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/? - person Renan Taranto; 17.03.2017
comment
Ты открываешь мне глаза! Но! Нет ни одного примера использования для этого - это первая важная вещь. Второй - такого метода, как в ORM setHydrator, нет. Только гидрат (истина | ложь). Теперь у меня аналогичная задача с гидратацией: получить объект со ссылкой, а в массиве ссылок должны быть только идентификаторы, а не полный объект. Конечно, я могу получить объект и сопоставить его, чтобы принимать значения стрелки. Но я полностью уверен, что mongoDB поддерживает получение результатов в пользовательском представлении. - person Nikita_kharkov_ua; 17.03.2017
comment
github.com/doctrine/mongodb-odm/issues/ - обсуждение этой проблемы - person Nikita_kharkov_ua; 14.07.2017