2016-01-22 2 views
0

С доктриной и построителем запросов я пишу запрос SELECT MAX(), и когда этот результат передается другому строителю запросов, в качестве параметра запрос работает просто отлично.Doctrine возвращаемый массив массива для скалярного запроса

Но по какой-то причине, я использую родной запрос SQL в другом месте в другое хранилище, и когда я использую $repo->getMaxMyThing(), это вернуть мне массив массив как array(array('1' => 42)).

Не, если я хочу получить результат, мне нужно ввести: $max[0]['1'] (0 - простой индекс массива, но «1» - это связанный с строкой ключ).

Был ли какой-либо метод в пакете Doctrine Bundle «преобразован» в простое целое число автоматически?

+2

показать код метода getMaxMyThing –

+1

Вы пытались использовать [getSingleScalarResult()] (http://stackoverflow.com/a/8227101/2257664)? –

+0

@ A.L Это работает, спасибо и жаль, что я полностью забыл дать вам ответ. Ответьте на вопрос, чтобы я мог проверить. –

ответ

1

Если вы не хотите, чтобы Doctrine возвращала объекты, вы можете использовать get*ScalarResult() query methods.

  • Query#getScalarResult(): Извлекает плоский прямоугольный/результирующий набор скалярных величин, которые могут содержать повторяющиеся данные. Чистое/смешанное различие не применяется.
  • Query#getSingleScalarResult(): извлекает одно скалярное значение из результата, возвращаемого dbms. Если результат содержит более одного скалярного значения, генерируется исключение. Чистое/смешанное различие не применяется.

Ниже приведен пример из документации:

$query = $em->createQuery('SELECT COUNT(u.id) FROM Entities\User u'); 
$count = $query->getSingleScalarResult(); 

$count будет одно значение (не массив) в соответствии с просьбой.

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