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

كيف يمكن الإستعلام من إستعلام فرعي في لارافيل

Mahmoud Alrashidi

السؤال

أرغب في الحصول على قيمة من خلال 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.*');

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

في الإصدارات الحديثة من 5.5 فما فوق أصبح بالإمكان عمل التالي:

Abc::selectSub(function($q) {
    $q->select('*')->groupBy('col1');
}, 'a')->count('a.*');

أو:

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...