"سيبدأ مثالنا العملي الأول بالاستعلام البسيط. سنحصل على المستخدمين النشطين وغير النشطين من قاعدة البيانات. لهذا، سنستخدم حقل 'active' في جدول المستخدمين لدينا، والذي يحتوي على قيم 1 أو 0:"

عادتا ما يلجئ بعض المطورين لإستخدام جملتين ، جمله للحصول على المستخدمين بقيمة active = 1, وجملة أخرى active = 0
$activeUsers = User::where('active', 1)->get();
$inactiveUsers = User::where('active', 0)->get();لكن بإمكاننا القيام بذلك بإستخدام Group By
$statusCount = User::query()
->addSelect(\DB::raw('count(*) as count'))
->groupBy('active')
->get();شرح الكود
$statusCount = User::query()
يبدأ هذا السطر استعلام Eloquent، الذي يعد جزءاً من إطار عمل Laravel، على نموذج "User".
->addSelect(\DB::raw('count(*) as count'))addSelect: تُستخدم هذه الطريقة لإضافة حقول إضافية إلى الاستعلام.
\DB::raw('count(*) as count'): يُستخدم هذا التعبير الخام لحساب العدد الإجمالي للسجلات (المستخدمين) في كل مجموعة. count(*) هي دالة SQL تقوم بحساب عدد الصفوف. as count يُستخدم لإعطاء اسم مستعار لهذه الدالة، والذي يمكن استخدامه لاسترجاع القيمة في البرنامج.
->groupBy('active')groupBy('active'): يُستخدم لتجميع النتائج بناءً على حقل 'active'. هذا يعني أن الاستعلام سيجمع المستخدمين إلى مجموعتين: مجموعة للمستخدمين الذين لديهم حقل 'active' مساوٍ لـ 1 (النشطين) ومجموعة للذين لديهم القيمة 0 (غير النشطين).
وفي ملف blade
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Status</th>
<th>Count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Active</td>
<td>{{ $statusCount['1']->count }}</td>
</tr>
<tr>
<td>Inactive</td>
<td>{{ $statusCount['0']->count }}</td>
</tr>
</tbody></table>
بالتالي سوف نحصل على البيانات بالشكل التالي
طريقة أخرى للقيام بذلك
public function index()
{
$statusCount = User::selectRaw("
COUNT(CASE WHEN active = '1' THEN 1 END) AS active_users,
COUNT(CASE WHEN active = '0' THEN 1 END) AS inactive_users
")
->toBase()
->first();
return view('groub_by', compact('statusCount'));
}شرح الكود
selectRaw: يستخدم لإدخال استعلام SQL خام. الاستعلام هنا يستخدم دوال SQL لحساب العدد:
COUNT(CASE WHEN active = '1' THEN 1 END) AS active_users: يحسب عدد المستخدمين الذين لديهم العمود active مساوي لـ '1'. هذه طريقة لفلترة البيانات داخل دالة العد.
COUNT(CASE WHEN active = '0' THEN 1 END) AS inactive_users: يعمل بنفس الطريقة لحساب المستخدمين الذين لديهم active مساوي لـ '0'.
وفي ملف blade
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>Status</th>
<th>Count</th>
</tr>
</thead>
<tbody>
<tr>
<td>Active</td>
<td>{{ $statusCount->active_users }}</td>
</tr>
<tr>
<td>Inactive</td>
<td>{{ $statusCount->inactive_users }}</td>
</tr>
</tbody>
</table>