Laravel-datatables: hasil kosong set data yajra pada tabel besar

Dibuat pada 26 Nov 2016  ·  3Komentar  ·  Sumber: yajra/laravel-datatables

Saya memiliki Model Question dengan sekitar 30.000 catatan seperti ini:

class Question extends Model
    {
        use SoftDeletes;

        protected $primaryKey = 'question_id';

        protected $fillable   = ['text', 'code', 'cat', 'answer', 'confirmed', 'is_private', 'email', 'parent', 'expert'];

        public function sub_questions ()
        {
            return $this->hasMany(Question::class, 'parent', 'question_id');
        }

        public function latest_sub_question ()
        {
            return $this->hasOne(Question::class, 'parent', 'question_id')->latest();
        }


    }

Untuk menampilkan daftar semua pertanyaan saya menggunakan paket laravel yajra datatable.

Ini adalah kode js saya:

var allQuestionsTable =
$('#allQuestionsTable').DataTable({
                        processing: true,
                        serverSide: true,
                        "bSort": false,
                        "responsive": true,
                        ajax: {
                            url: '{!! route('admin.questionsDatatable') !!}'
                        },
                        columns: [
                            {data: 'checkbox'},
                            {data: 'code', name: 'code'},
                            {data: 'text', name: 'text'},
                            {data: 'created_at'},
                            {data: 'answer', name: 'answer'},
                            {data: 'expert'},
                            {data: 'confirmed'},
                            {data: 'actions'}
                        ]
                    });

Dan di bagian belakang saya menulis fungsi ini:

public function questionsDatatable (Request $request)
        {
            $questions = Question::with('latest_sub_question')->whereNull('parent');

            $datatable = app('datatables')->of($questions)
                ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');

                //other column modifications comes here

            return $datatable->make(true);
        }

Pertama ketika tabel saya memiliki beberapa baris semuanya bekerja dengan baik tetapi ketika saya menambahkan sejumlah besar catatan baru, questionsDatatable mengembalikan nilai kosong dan menyebabkan datatables mengembalikan kesalahan peringatan.

apa masalahnya ? dan apakah ada parameter yang dapat digunakan untuk mengatasi masalah ini?

question

Komentar yang paling membantu

Anda memang memuat semua catatan Anda yang pasti akan menghabiskan banyak sumber daya Anda. Saya sarankan Anda menghapus get . Coba sesuatu seperti di bawah ini.

public function questionsDatatable (Request $request)
{
    $questions = Question::with('latest_sub_question')->whereNull('parent');
    $datatable = app('datatables')->of($questions)
        ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');
        ->editColumn('latest_sub_question', function($item) {
            return is_null($item->latest_sub_question) ? $item : $item->latest_sub_question;
        })
        //other column modifications comes here

    return $datatable->make(true);
}

Semua 3 komentar

Sudahkah Anda mencoba memeriksa permintaan ajax? Ini akan memberi Anda kesalahan dump tentang apa yang menyebabkan masalah.

@yajra , Ya saya lakukan tetapi hanya respons kosong dan kode status 500 Internal Server Error dikembalikan.

tentu saja antara mengambil pertanyaan dan sebelum memanggil app('datatables') untuk beberapa alasan untuk mengulangi hasil saya harus menggunakan metode get() dan kemudian menggunakan metode each() pada $questions . sebenarnya kode backend saya adalah:

public function questionsDatatable (Request $request)
        {
            $questions = Question::with('latest_sub_question')->whereNull('parent');
             $questions = $questions->get();

            $questions = $questions->map(function ($item, $key) {
                return is_null($item->latest_sub_question) ? $item : $item->latest_sub_question;
            });

            $questions->sortByDesc('created_at');

            $datatable = app('datatables')->of($questions)
                ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');

                //other column modifications comes here

            return $datatable->make(true);
        }

Saya tidak tahu itu alasan kesalahan atau tidak?

Anda memang memuat semua catatan Anda yang pasti akan menghabiskan banyak sumber daya Anda. Saya sarankan Anda menghapus get . Coba sesuatu seperti di bawah ini.

public function questionsDatatable (Request $request)
{
    $questions = Question::with('latest_sub_question')->whereNull('parent');
    $datatable = app('datatables')->of($questions)
        ->addColumn('checkbox', '<input type="checkbox" name="item_id[]" value="{{$question_id}}" id="Check_{{$question_id}}">');
        ->editColumn('latest_sub_question', function($item) {
            return is_null($item->latest_sub_question) ? $item : $item->latest_sub_question;
        })
        //other column modifications comes here

    return $datatable->make(true);
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

shadoWalker89 picture shadoWalker89  ·  3Komentar

techguydev picture techguydev  ·  3Komentar

alejandri picture alejandri  ·  3Komentar

hohuuhau picture hohuuhau  ·  3Komentar

jgatringer picture jgatringer  ·  3Komentar