Laravel-datatables: مجموعة نتائج فارغة yajra datable على طاولات كبيرة

تم إنشاؤها على ٢٦ نوفمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: yajra/laravel-datatables

لدي نموذج Question بحوالي 30000 سجل مثل هذا:

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();
        }


    }

لإظهار قائمة بجميع الأسئلة التي أستخدمها yajra datatable laravel package.

هذا هو كود js الخاص بي:

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'}
                        ]
                    });

وفي النهاية الخلفية كتبت هذه الوظيفة:

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);
        }

أولاً ، عندما كان الجدول يحتوي على عدد قليل من الصفوف ، عملت كل الأشياء بشكل جيد ولكن عندما أضفت عددًا كبيرًا من السجلات الجديدة ، أعاد questionsDatatable قيمة فارغة وتسبب في إرجاع جداول البيانات لخطأ تنبيه.

ما المشكلة ؟ وهل هناك أي معلمة يمكن استخدامها لحل هذه المشكلة؟

question

التعليق الأكثر فائدة

أنت بالفعل تقوم بتحميل جميع سجلاتك والتي ستلتهم بالتأكيد الكثير من مواردك. أقترح عليك إزالة get . جرب شيئًا مثل أدناه.

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);
}

ال 3 كومينتر

هل حاولت فحص طلب أياكس؟ يجب أن يمنحك تفريغ خطأ حول سبب المشكلة.

yajra ، نعم فعلت ولكن فقط رد فارغ وتم إرجاع رمز الحالة 500 Internal Server Error .

بالطبع بين جلب الأسئلة وقبل استدعاء app('datatables') لسبب ما لتكرار النتيجة ، يجب أن أستخدم طريقة get() ثم استخدم طريقة each() على $questions . في الحقيقة كود الواجهة الخلفية الخاص بي هو:

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);
        }

لا أعلم أن هذا سبب للخطأ أم لا؟

أنت بالفعل تقوم بتحميل جميع سجلاتك والتي ستلتهم بالتأكيد الكثير من مواردك. أقترح عليك إزالة get . جرب شيئًا مثل أدناه.

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);
}
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات