2017-02-02 2 views
1

Я пытаюсь сгенерировать nativeQuery, используя смешанное ResultSetMapping, которое содержит сущности и скалярные результаты. Например:Symfony2 - Доступ к объекту из ключа результата NativeQuery

$rsm = new ResultSetMapping();   
$rsm->addEntityResult('MyBundle:Evaluation','e'); 
$rsm->addFieldResult('e','id','id'); 
$rsm->addScalarResult('company','company'); 

, когда я {{свалка()}} один из результатов запроса элементов, это выглядит следующим образом:

array:2 [▼ 
    0 => Evaluation {▼ 
    #id: 24 
    } 
    "company" => "INRA" 
] 

Таким образом, в результирующем массиве, компания отождествляется с ключ «компания», а мой объект оценки идентифицирован клавишей «0».

Мой вопрос: есть ли другой способ доступа к объектам, определенным в ResultSetMapping(), кроме как с их цифровым ключом? как ScalarResults?

+0

Какова ваша фактическая проблема? ... – rubin

+0

Ну, мой код работает, но заставлять делать что-то вроде $ result [0] вместо $ result ['оценка'], например, очень удручает. Предположим, у меня был более сложный пример с 10 различными EntityResults, запись $ result [8] не читается, и разработчику, видящему этот код, придется открыть класс репозитория, чтобы узнать, какой тип данных $ result [8] будет содержать. Более того, если кто-то добавляет другой результат сущности в начале запроса, все предыдущие ссылки на результат вызовут ошибки, потому что будет смещение. – alpadev

+0

Я только что заметил ваш комментарий, вы можете представить более сложный пример с 2 или 3 объектами EntityResults? Кажется, у вас есть некоторые понятия неправильно. Когда вы извлекаете несколько элементов, вы делаете это для итерации через них с помощью цикла, каждый элемент должен иметь одинаковые свойства. Доступ непосредственно к элементу массива выглядит следующим образом: $ result [8] указывает, что в коде есть что-то неправильное. – lchachurski

ответ

0

Количество возвращенных результатов связано с запросом, а не с объектом ResultSetMapping.

Предполагая, что вы использовали $query->getResult(); для получения данных, вы можете переключиться на $query->getSingleResult() или $query->getOneOrNullResult() Имейте в виду, что эти методы бросают исключения, когда доступно несколько результатов.

Вы также (скорее всего) необходимо обновить последнюю строку и поместить все под тем же псевдонимом:

$rsm->addScalarResult('company','e');

Второй парам представляет псевдоним docs. Кроме того, были рассмотрены проблемы с simillar. here

Надеюсь, что это поможет.

+0

Это не проблема, я получаю больше одного результата в моем запросе, и все в порядке! Хотя, как я сказал в своем сообщении, данные, которые я отобразил (из функции dump() doctrine, представляют только один элемент набора результатов. Это означает, что для строки результата foreach у меня будет $ result [0] и $ result ['company']. То, что я хочу, это настраиваемый ключ, например, $ result ['оценка'] вместо $ result [0], для чтения и обслуживания кода – alpadev

Смежные вопросы