الترتيب حسب العلاقات - إستخدام OrderBy أو SortBy

الترتيب حسب العلاقات - إستخدام OrderBy أو SortBy

2024-03-04 وقت القراءه : 1 دقائق

لفرض أن لدي هذا الجدول

الحقول id, fname, email, created_at هي حقول موجوده في قاعدة البيانات لكن Days_Active يتم حسابها في الكود in the fly

للحصول على Days_Active ببساطة في يمكننا إنشاء getter في الـ model

public function getDaysActiveAttribute(){
    return $this->created_at->diffInDays($this->updated_at);
}

 وفي ملف blade يمكن إستخدام الدالة لكن بشكل sneak case

<td>{{ $student->days_active }}</td>

لكن السؤال المهم، ماذا لو أردنا ترتيب البيانات حسب days_active ، ببساطه يمكن القيام بذلك بالكود التالي

public function index(){
     $students = Student::orderBy('days_active')->get();
     return view('student', compact('students'));
 }

 

إلا أن الكود أعلاه سيعطي الخطئ التالي

Illuminate\Database\QueryException
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'days_active' in 'order clause' (SQL: select * from `students` order by `days_active` asc)

هذا الخطئ يعني أن الحقل days_active غير موجود في قاعده البيانات، وكما قلنا سابقا أنه تم حساب الأيام من خلال الكود in the fly، ولحل هذه المشكله فإننا سوف نلجأ لإستخدام collection لترتيب البيانات حسب days_active من خلال إستخدام sortBy .

حيث يمكن إستخدام collection بعد جلب البيانات من قاعدة البيانات والدالة sortby هي من ستقوم بترتيب البيانات

public function index(){
     $students = Student::all()->sortBy('days_active');
     return view('student', compact('students'));
 }

 

بالكود أعلاه فإنه بشكل إفتراضي سيتم ترتيب البيانات بشكل تصاعدي asc ماذا لو أردنا ترتيبها بشكل تنازلي desc

public function index(){
     $students = Student::all()->sortByDesc('days_active');
     return view('student', compact('students'));
 }

التعليقات
زائر
منذ سنتين

ممكن تعمل شرح ازى استخدم yajradatatabes with elquoent relationships

إضافة تعليق
Loading...