लारवेल एलक्विंट ग्रुपबी () और प्रत्येक समूह की गिनती भी लौटाते हैं


110

मेरे पास एक तालिका है जिसमें अन्य कॉलम, ब्राउज़र संस्करणों का एक कॉलम शामिल है। और मैं बस रिकॉर्ड-सेट से जानना चाहता हूं कि प्रत्येक प्रकार के ब्राउज़र कितने हैं। इसलिए, मुझे कुछ इस तरह से समाप्त करने की आवश्यकता है: कुल रिकॉर्ड: 10; इंटरनेट एक्सप्लोरर 8: 2; क्रोम 25: 4; फ़ायरफ़ॉक्स 20: 4. (सभी 10 तक जोड़ना)

यहाँ मेरे दो पेंस हैं:

$user_info = Usermeta::groupBy('browser')->get();

बेशक कि सिर्फ 3 ब्राउज़र शामिल हैं और प्रत्येक की संख्या नहीं है। मैं यह कैसे कर सकता हूँ?

जवाबों:


217

यह मेरे लिए काम कर रहा है:

$user_info = DB::table('usermetas')
                 ->select('browser', DB::raw('count(*) as total'))
                 ->groupBy('browser')
                 ->get();

1
उत्तम! बस 'ब्राउज़र' को इस प्रकार जोड़ा गया: चयन करें ('ब्राउज़र', ...) और सब कुछ आवश्यक हो गया। तुम अच्छे हो, तुम! youtube.com/watch?v=ravi4YtUTxo
kJamesy

धन्यवाद। लेकिन यह तब काम क्यों नहीं करता है जब उपयोगकर्ता जैसे मॉडल का उपयोग किया जाता है :: चयन ('देश', डीबी :: कच्चा ('गणना) (* कुल के रूप में) ->> अन्यमेथोड्स ()?
डॉनडेवाडोना

1
+ v। नियंत्रकों पर DB के बजाय \ DB का उपयोग करें
अमित बेरा

@AmitBera क्या आप इसका कारण बता सकते हैं? कृपया
JCarlosR

8
क्या कोई विशेष कारण है कि आप क्यों पसंद करते DB::table('usermetas')->..हैं Usermeta::..?
एडम

34

यह मेरे लिए काम करता है (लारवेल 5.1):

$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();

22

धन्यवाद एंटोनियो,

मैंने listsकमांड को अंत में जोड़ा है इसलिए यह केवल एक एरे को कुंजी और गिनती के साथ लौटाएगा:

लारवेल ४

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser');

लारवेल 5.1

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->lists('total','browser')->all();

लारवेल 5.2+

$user_info = DB::table('usermetas')
             ->select('browser', DB::raw('count(*) as total'))
             ->groupBy('browser')
             ->pluck('total','browser')->all();

1
धन्यवाद। एक नोट: -> 5.1 उदाहरण में सभी () को हटा दिया जाना चाहिए, क्योंकि आप पहले से ही परिणामों को सूचीबद्ध करते हैं।
पिम


13

यदि आप संग्रह, GroupBy और गिनती प्राप्त करना चाहते हैं:

$collection = ModelName::groupBy('group_id')
->selectRaw('count(*) as total, group_id')
->get();

चीयर्स!


9

उस तरह से काम करता है, थोड़ा और अधिक साफ है। getQuery()बस अंतर्निहित बिल्डर लौटाता है, जिसमें पहले से ही तालिका संदर्भ होता है।

$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
                     ->select('browser', $browser_total_raw)
                     ->groupBy('browser')
                     ->pluck('total','browser');

5
  1. खुला हुआ config/database.php
  2. कनेक्शन सेटिंग्स के strictअंदर कुंजी खोजेंmysql
  3. करने के लिए मान सेट करें false

1

इस के साथ प्रयास करें

->groupBy('state_id','locality')
  ->havingRaw('count > 1 ')
  ->having('items.name','LIKE',"%$keyword%")
  ->orHavingRaw('brand LIKE ?',array("%$keyword%"))

2
हालांकि यह प्रश्न का उत्तर दे सकता है, उत्तर के आवश्यक भागों की व्याख्या करना बेहतर है और संभवतः ओपी कोड के साथ समस्या क्या थी।
पिरहो

1

यहां कच्चे बयानों का उपयोग करने की आवश्यकता के बिना समूह को संभालने के लिए एक अधिक लारवेल तरीका है।

$sources = $sources->where('age','>', 31)->groupBy('age');

$output = null;
foreach($sources as $key => $source) {
    foreach($source as $item) {
        //get each item in the group
    }
    $output[$key] = $source->count();
}

8
यह स्मृति और प्रसंस्करण भूख है।
डोनकाडोना

मेरे लिए एक ही मेमोरी पीबी
विन्स

0

यदि आप सॉर्ट किए गए डेटा का उपयोग करना चाहते हैं तो यह भी करें

$category_id = Post::orderBy('count', 'desc')->select(DB::raw('category_id,count(*) as count'))->groupBy('category_id')->get();

0
$post = Post::select(DB::raw('count(*) as user_count, category_id'))->groupBy('category_id')->get();

यह एक उदाहरण है जिसके परिणामस्वरूप श्रेणी के आधार पर गणना की जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.