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

السؤال

نشر

أرغب في الحصول على قيمة من خلال SQL التالي باستخدام Eloquent ORM:

SELECT COUNT(*) FROM 
 (SELECT * FROM abc GROUP BY col1) AS a;

فكرت في الطريقة التالية:

$sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
$num = Abc::from(\DB::raw($sql))->count();
print $num;

ماهي الطريقة الصحيحة لفعل ذلك؟

Recommended Posts

  • 0
نشر

يمكننا عمل جدول فرعي يحوي الاستعلام المطلوب ثم نقوم بالاستعلام منه عن طريق الدالة mergeBindings

أي يصبح الاستعلام بالشكل التالي:

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )

    ->mergeBindings($sub->getQuery()) // يمكنك هنا تحديد الاستعلام 

    ->count();

ولكن بطريقة اسهل من إصدار Laravel v5.6.12 أضيفت دالتين ()fromSub() and fromRaw لباني الاستعلامات حيث أصبح بالامكان جلب البيانات من الاستعلامات الجزئية مباشرة:

DB::query()->fromSub(function ($query) {
    $query->from('abc')->groupBy('col1');
}, 'a')->count();

|

Abc::selectSub(Abc::select('*')->groupBy('col1'), 'a')->count('a.*');

حيث أصبح هذه الطريقة الأفضل.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...