«Неопределенный индекс: данные» - PullRequest
1 голос
/ 21 мая 2019

У меня проблема с Yajra \ DataTables;Когда я пытаюсь получить данные от контроллера через:

$servives = DB::table('services')->where('status', '=', 3)->get();
return datatables($servives)->toJson();

Это выдает мне следующую ошибку:

{"draw":1,"recordsTotal":3,"recordsFiltered":0,"data":[],"error":"Exception Message:\n\nUndefined index: data"}

Здесь вы можете проверить мой код js:

  $(document).ready(function () {
            $('#table').DataTable({
                processing: true,
                serverSide: true,
                ajax: "{{ route('all.my_services') }}",
                columns: [
                    { data: 'id', name: 'id' },
                    { data: 'name', name: 'name' },
                    { data: 'price', name: 'price' },
                    { data: 'amount', name: 'amount' },
                    {"mData": {},
                        "mRender": function (data, type, row) {
                            return '<a href="/partner-share-services?id='+ data.id + '"><button class="btn btn-success">Share</button></a>';
                        }
                    }

                ]
            });
        });

Здесь вы можете увидеть мой $ services массив:

Collection {#326
  #items: array:2 [
    0 => {#319
      +"id": 103
      +"partner_id": 1004
      +"name": "AI-92"
      +"price": 146
      +"amount": 9007
      +"created_at": "2019-05-15 07:04:07"
      +"updated_at": "2019-05-16 06:10:13"
      +"is_active": null
      +"status": 3
    }
    1 => {#332
      +"id": 104
      +"partner_id": 1004
      +"name": "AI 95"
      +"price": 190
      +"amount": 650
      +"created_at": "2019-05-16 06:49:19"
      +"updated_at": "2019-05-16 06:52:34"
      +"is_active": null
      +"status": 3
    }
   ]
}

Что не так?

1 Ответ

1 голос
/ 21 мая 2019

В контроллере:

use DataTables;
use DB;


public function getDatatable(){
   $services = DB::table('services')->where('status',3);

   return Datatables::of($services)
          ->addColumn('share', function($services){
               return '<a href="/partner-share-services?id='. $services->id . '"><button class="btn btn-success">Share</button></a>';
          })
          ->rawColumns(['share'])
          ->make(true);
}

В файле маршрута (web.php):

Здесь я использую имя контроллера ServiceController, которое можно заменить именем контроллера

Route::get('get-datatable', 'ServiceController@getDatatable')

В js:

$(document).ready(function(){
     $(function() {
        var baseurl = window.location.protocol + "//" + window.location.host;
        var table = $('#table').DataTable({
            processing: true,
            serverSide: true,
            ajax: baseurl + "/get-datatable",
            columns: [
                { data: 'id', name: 'id' },
                { data: 'name', name: 'name' },
                { data: 'price', name: 'price' },
                { data: 'amount', name: 'amount' },
                { data: 'share', name: 'share' }
            ]
        });
    });
});

В блейд-файле:

<table class="table table-bordered" id="table">
   <thead>
      <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Price</th>
        <th>Amount</th>
        <th>Share</th>
      </tr>
   </thead>
</table>
...