لفرض أن لدي هذا الجدول
الحقول 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