отформатировать запрос результата массива из доктрины в простой массив

У меня есть этот контроллер с запросом доктрины:

$em=$this->getDoctrine()->getManager();$queryIndex = $em->createQuery( 'SELECT g.index
FROM MySpaceMyBundle:Graphique g');

$result = $queryIndex->getScalarResult();

$resultArray = $result -> toArray();

$response = new Response();
$data = json_encode($resultArray);
$response->headers->set('Content-Type', 'application/json');
$response->setContent($data);

return $response;

Но у меня есть эта ошибка:

Ошибка: вызов функции-члена toArray () для необъекта 500
Внутренняя ошибка сервера — FatalErrorException

Но если я попробую это в моем контроллере, это сработает:
$ массив = массив (1,5,7,85,74,24,9,6,5,4,8555);

    $response = new Response();
$data = json_encode($array);
$response->headers->set('Content-Type', 'application/json');
$response->setContent($data);

return $response;

это возвращает меня: [1,5,7,85,74,24,9,6,5,4,8555]

Мне нужно отобразить результаты моего запроса в массив только для передачи значений данных в json для Highcharts.


ОБНОВИТЬ

Если я захожу на страницу, чтобы посмотреть результаты json (см. Контрольный список ниже), с моими запросами у меня будет такой результат:

[{"index":"1700.000"},{"index":"1200.000"},{"index":"1200.000"},{"index":"1304.000"},{"index":"1800.000"},{"index":"2012.000"},{"index":"2048.000"},{"index":"1048.000"},{"index":"3000.000"},{"index":"5421.000"}]

индекс это имя столбца в моей базе данных и чисел являются ценности для индекса в моей базе данных.

Если я сделаю var_dumpВот результаты:

<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=10)</i>
0 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1700.000'</font> <i>(length=8)</i>
1 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1200.000'</font> <i>(length=8)</i>
2 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1200.000'</font> <i>(length=8)</i>
3 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1304.000'</font> <i>(length=8)</i>
4 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1800.000'</font> <i>(length=8)</i>
5 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'2012.000'</font> <i>(length=8)</i>
6 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'2048.000'</font> <i>(length=8)</i>
7 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'1048.000'</font> <i>(length=8)</i>
8 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'3000.000'</font> <i>(length=8)</i>
9 <font color='#888a85'>=&gt;</font>
<b>array</b> <i>(size=1)</i>
'index' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'5421.000'</font> <i>(length=8)</i>
</pre>

Как я уже сказал, результаты сделаны для того, чтобы быть в графике от highchart.js, Это скрипт на мой взгляд:

$(document).ready(function() {
var options = {
chart: {
renderTo: 'linechart',
type: 'spline'
},
series: [{}]
};

var url =  "{{ path('myPage') }}";
$.getJSON(url,  function(data) {
options.series[0].data = data;
var chart = new Highcharts.Chart(options);
});
});

На старшей диаграмме имеется простой массив для отображения результатов в виде графики, потому что, когда я использую следующий код для тестирования в моем контроллере, результаты отображаются правильно:

 $array = array(1,5,7,85,74,24,9,6,5,4,8555);
$response = new Response();
$data = json_encode($array);
$response->headers->set('Content-Type', 'application/json');
$response->setContent($data);

return $response;

это возвращает меня:

/*var_dump*/
<pre class='xdebug-var-dump' dir='ltr'>
<b>array</b> <i>(size=11)</i>
0 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>1</font>
1 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>5</font>
2 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>7</font>
3 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>85</font>
4 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>74</font>
5 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>24</font>
6 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>9</font>
7 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>6</font>
8 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>5</font>
9 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>4</font>
10 <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>8555</font>
</pre>

/*json response*/
[1,5,7,85,74,24,9,6,5,4,8555]

Вместо

[{"index":"1700.000"},{"index":"1200.000"},{"index":"1200.000"},{"index":"1304.000"},{"index":"1800.000"},{"index":"2012.000"},{"index":"2048.000"},{"index":"1048.000"},{"index":"3000.000"},{"index":"5421.000"}]

Я думаю, мне нужно сделать так, чтобы результаты формировались из моей базы данных:

[1700.000, 1200.000,1200.000,1304.000,1800.000,2012.000,2048.000,1048.000,3000.000,5421.000]

1

Решение

Действительно, проблема с данными. На самом деле я вижу две проблемы: index ничего не значит для Highcharts. Там должен быть y, Также ваши значения являются строками, а должны быть числами.

Или я думаю, что простой предварительной обработки будет достаточно:

$.getJSON(url,  function(data) {
var d = [];
$.each(data, function(i, e) {
d.push(parseFloat(e.index)); // create format [y_0, y_1, ... ,y_N]
});
options.series[0].data = d;
var chart = new Highcharts.Chart(options);
});
1

Другие решения

Из документации:

Query#getScalarResult(): Retrieves a flat/rectangular result set of scalar values that can contain duplicate data. The pure/mixed distinction does not apply.

Ваш $result переменная, вероятно, не объект. Запустить var_dump на это проверить. Наверное, поэтому ты не можешь позвонить ->toArray() в теме.

0

Я нашел решение благодаря разработчику stackoverflow: проверка Вот !

На самом деле мне нужно использовать второй параметр в моем кодировке json, чтобы убрать двойную кавычку:

$data = json_encode($array, JSON_NUMERIC_CHECK);

Большое спасибо @Dawid Sajdak за его ответ. Проблема заключалась в том, что у меня есть строки в массиве, или значения в моей базе данных имеют десятичный тип.

0
По вопросам рекламы [email protected]