2017-01-29 7 views
0

У меня есть этот запрос, где я получаю мои данные, используя нумерацию страниц:Laravel проблема при получении данных для Google диаграммы при использовании постраничной функции

$data = Mymodel::orderBy('id','desc')->paginate(10); 

И у меня нет никаких проблем для отображения данных в загрузочном столе с пагинацией ссылки в файл лезвия:

<table class="table table-bordered table-responsive table-striped table-hover table-condensed"> 
      <thead> 
      <tr> 
       <th>id</th> 
       <th>value1</th> 
       <th>value2</th> 
      </tr> 
      </thead> 
      <tbody> 
      @foreach($data as $row) 
       <tr> 
        <td>{{ $row->id }}</td> 
        <td>{{ $row->value1 }}</td>  
        <td>{{ $row->value2 }}</td>     
       </tr> 
      @endforeach 
      </tbody> 
     </table> 

     {{ $data->links() }} 

Теперь при настройке Google линейного графика:

@section('js') 
    {{--Google charts--}} 
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 
    <script type="text/javascript"> 
     google.charts.load('current', {'packages':['corechart'],'language': 'es'}); 
     google.charts.setOnLoadCallback(drawLinechart); 

     function drawLinechart() 
     { 

      var record = {!!$data!!}; 
      var data = new google.visualization.DataTable();/*http://stackoverflow.com/a/22640426/1883256*/ 
      var rowsnumber = record.length; 

      //Declaring the column names 
      data.addColumn('number', 'ID'); 
      data.addColumn('number', 'Value1'); 
      data.addColumn('number', 'Value2');   

      //Filling each row. Ref:http://stackoverflow.com/a/7861051/1883256 
      $.each(record, function(k, v) { 
       //display the key and value pair 
       //console.log(k + ' is ' + v.id); 
       data.addRow([v.id,parseInt(v.value1),parseInt(v.value2)]); 
      }); 

      var options = { 
       title: 'Data last '+ rowsnumber +' rows', 
       //curveType: 'function', 
       backgroundColor: { fill:'transparent'}, 
       height: 500, 
       legend: { position: 'bottom' },    
      }; 

      var chart = new google.visualization.LineChart(document.getElementById('linechart')); 

      chart.draw(data, options); 
     } 
    </script> 

     {{-- end of Google charts--}} 
@endsection 

Это не работает, потому что получается, что разбивать на страницы вставляет HTML код для постраничной ссылок, так как я получаю следующее сообщение об ошибке:

Uncaught SyntaxError: Unexpected token <

И это потому, что $data выходы:

var record = <ul class="pagination"> ... и так далее ... вместо коллекции Eloquent. Он фактически выводит LengthAwarePaginator.

Тогда как я могу получить доступ к данным ($row->id, $row->value1, $row->value2) прямо в яваскрипта разделе?

С другой стороны, это будет работать, если я получаю данные через другой переменной запроса:

$datachart = Mymodel::orderBy('id','desc')->take(30)->get(); 

, который фактически представляет собой сборник. Другими словами, это работает:

var record = {!!$datachart!!}; 

Но что я действительно хочу, чтобы картировать данные вместе с нумерацией страниц, так что на каждой странице я может выводить соответствующие значения в Linechart.

Любые идеи о том, как получить доступ к данным коллекции в javascript прямо из LengthAwarePaginator?

Обход: Я получаю другую коллекцию с тем же запросом, но без разбивки на страницы и теперь она работает.

ответ

0

Попробуйте

var record = {!! $data->data !!}; 

Я думаю Paginator хранит данные в data объекта внутри response объекта.

+0

Приятная попытка ... но я получаю следующую ошибку: 'Undefined property: Illuminate \ Pagination \ LengthAwarePaginator :: $ data' – Pathros

+0

сделать' dd ($ data) 'из вашего контроллера. И показать результат здесь. Пожалуйста. А также помните, что у вторых 'data' нет' '' впереди. – EddyTheDove