2016-07-18 6 views
0

У меня есть странная проблема, в которой я не вижу никакого очевидного решения.Странные результаты с Углеродным фильтром на коллекции «Красноречивый» в шаблоне ножа

Я строю диаграмму jQuery итогов транзакций за последние 30 дней, но я не получаю правильный вывод. Вот соответствующий код шаблона лезвия:

@for ($i = 29; $i >= 1; $i--) 
{y: '{{ \Carbon\Carbon::now()->subDays($i)->toDateString() }}', item1: '{{ $transactions->whereDate('created_at', '=', \Carbon\Carbon::now()->subDays($i)->toDateString())->where('status', 'C')->sum('amount') }}'}, 
@endfor 
{y: '{{ \Carbon\Carbon::now()->toDateString() }}', item1: '{{ $transactions->where('created_at', '>=', \Carbon\Carbon::now()->toDateString())->where('status', 'C')->sum('amount') }}'} 

С моей фиктивными данными, когда $ я = 3 он должен вернуть '10 .00' и все остальное должно вернуться „0“.

Пара примечаний: Если я делаю FIRST вывод как «3 дня назад», он возвращает ожидаемое значение. Пример:

{y: '{{ \Carbon\Carbon::now()->subDays(3)->toDateString() }}', item1: '{{ $transactions->whereDate('created_at', '=', \Carbon\Carbon::now()->subDays(3)->toDateString())->where('status', 'C')->sum('amount') }}'}, 
@for ($i = 29; $i >= 1; $i--) 
{y: '{{ \Carbon\Carbon::now()->subDays($i)->toDateString() }}', item1: '{{ $transactions->whereDate('created_at', '=', \Carbon\Carbon::now()->subDays($i)->toDateString())->where('status', 'C')->sum('amount') }}'}, 
@endfor 
{y: '{{ \Carbon\Carbon::now()->toDateString() }}', item1: '{{ $transactions->where('created_at', '>=', \Carbon\Carbon::now()->toDateString())->where('status', 'C')->sum('amount') }}'} 

Кроме того, если я жесткий код любых значений в графу он отлично работает, так что должны исключают любой вопрос JQuery. По сути, кажется, что только в первый раз я использую этот вызов, он работает.

Я предполагаю, что решение состоит в том, чтобы очистить количество вызовов Carbon/collection (так как их общее количество - 60), но я не совсем уверен, с чего начать. Я передаю коллекцию с моего контроллера как «транзакции».

Результат:

{y: '2016-06-18', item1: '0'}, 
... 
{y: '2016-07-15', item1: '0'}, 
{y: '2016-07-16', item1: '0'}, 
{y: '2016-07-17', item1: '0'}, 
{y: '2016-07-18', item1: '0'} 

Ожидаемый результат:

{y: '2016-06-18', item1: '0'}, 
... 
{y: '2016-07-15', item1: '10.00'}, 
{y: '2016-07-16', item1: '0'}, 
{y: '2016-07-17', item1: '0'}, 
{y: '2016-07-18', item1: '0'} 

ответ

0

попробовать сделать

with(clone $transaction)->query_here 

запрос может быть перезаписана/изменены через вне цикла.

Надеюсь, это помогло!

0

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

Попробуйте это, в контроллере добавьте:

$graph = []; 
$currentDay = \Carbon\Carbon::now(); 

for ($i=0; $i < 30; $i++) { 
    if ($i > 0) { 
     // Subtract a day starting from the second loop 
     $currentDay->subDay(); 
    } 

    $dateString = $currentDay->toDateString(); 

    $currentDayData = [ 
     'y' => $dateString, 
     'item1' => $transactions->whereDate('created_at', $dateString)->where('status', 'C')->sum('amount'), 
    ]; 

    // Prepend to final array 
    array_unshift($graph, $currentDayData); 
} 

$graph = json_encode($graph); 

// Don't forget to export $graph to your view 

Тогда на ваш взгляд месте строки JSON в соответствующем data-* атрибута. Например:

<div id="graph" data-graph="{{ $graph }}"></div> 

Наконец, в файле .js вы можете получить данные и построить график оттуда:

// Note: You don't need to parse the JSON string manually 
// since jquery will do that automatically in this case 
const data = $('#graph').data('graph'); 

// Then feed the data into whatever graph API that you use 

Я не проверял этот код, поэтому дайте мне знать, как это идет.

+0

Просто осознано, это просили 11 месяцев назад lol. – Fahmi