اذهب إلى المحتوى

السؤال

نشر

لدي نموذج للطلبات Order حيث كل مُستخدم له عدة طلبات حسب العلاقة hasMany:

<?php
public function orders() {
  return $this->hasMany(Order::class);
}

أما النموذج Order:

<?php
public function user() {
  return $this->belongsTo(User::class);
}

حيث يربط النموذجين الحقل user_id و يوجد في جدول الطلبات الحقل amount لتخزين مبلغ الطلب. أريد معرفة كيف بإمكاني عمل فلترة للمُستخدمين حسب الأكثر طلباً أي من الأعلى طلب إلى الأقل طلب و الفلترة أيضاً حسب مجموع قيمة الطلبات.

Recommended Posts

  • 1
نشر

يُمكنك إستخدام join لعمل الشيء الذي تُريده بهذا الشكل:

لعمل فلترة للمُستخدمين حسب الأكثر طلباً:

<?php

User::join('orders', 'orders.user_id', '=', 'users.id')
  ->selectRaw('users.*, count(orders.id) as orders_count, sum(orders.amount) as total_amount')
  ->groupBy('users.id')
  ->orderBy('orders_count', 'desc')
  ->paginate(10);

لعمل فلترة للمُستخدمين حسب مجموع قيمة الطلبات:

<?php

User::join('orders', 'orders.user_id', '=', 'users.id')
  ->selectRaw('users.*, count(orders.id) as orders_count, sum(orders.amount) as total_amount')
  ->groupBy('users.id')
  ->orderBy('total_amount', 'desc')
  ->paginate(10);

أما إن كنت تريد عمل فلترة للمُستخدمين حسب مجموع قيمة الطلبات بالإضافة لتحديد مجال للمجموع يُمكنك ذلك من خلال التالي:

<?php

$min_amount = 30000;
$max_amount = 40000;

User::join('orders', 'orders.user_id', '=', 'users.id')
  ->selectRaw('users.*, count(orders.id) as orders_count, sum(orders.amount) as total_amount')
  ->groupBy('users.id')
  ->havingRaw('total_amount >= ? and total_amount <= ?', [$min_amount, $max_amount])
  ->orderBy('total_amount', 'desc')
  ->paginate(10);

بنفس الطريقة إن أردت تحديد مجال لعدد الطلبات يُمكنك ذلك أيضاً.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...