لدي نموذج 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
قيمة فارغة وتسبب في إرجاع جداول البيانات لخطأ تنبيه.
ما المشكلة ؟ وهل هناك أي معلمة يمكن استخدامها لحل هذه المشكلة؟
هل حاولت فحص طلب أياكس؟ يجب أن يمنحك تفريغ خطأ حول سبب المشكلة.
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);
}
التعليق الأكثر فائدة
أنت بالفعل تقوم بتحميل جميع سجلاتك والتي ستلتهم بالتأكيد الكثير من مواردك. أقترح عليك إزالة
get
. جرب شيئًا مثل أدناه.