सवाल Laravel Eloquent GroupBy () और प्रत्येक समूह की गिनती भी वापस आती है


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

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

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

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


60
2017-08-30 12:35


मूल




जवाब:


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

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

117
2017-08-30 13:11



उत्तम! इस प्रकार चयन करने के लिए बस 'ब्राउज़र' जोड़ा गया: चुनें ('ब्राउज़र', ...) और सबकुछ आवश्यक है। तुम अच्छे हो, तुम! youtube.com/watch?v=ravi4YtUTxo - kJamesy
धन्यवाद। लेकिन जब यह उपयोगकर्ता :: चयन ('देश', डीबी :: कच्चे ('गिनती (*) कुल के रूप में मॉडल के साथ उपयोग किया जाता है) -> अन्य विधि ()? - doncadavona
V +। नियंत्रकों पर डीबी के बजाय \ DB का उपयोग करें - Amit Bera
@ एमिटबेरा क्या आप कारण बता सकते हैं ?, कृपया - JCarlos
क्या कोई विशेष कारण है कि आप पसंद करते हैं DB::table('usermetas')->.. ऊपर Usermeta::.. ? - Adam


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

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

19
2017-07-20 10:00





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

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

लैरवेल 4

$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();

14
2017-08-11 15:34



धन्यवाद। एक नोट: -> 5.1 उदाहरण में सभी () को हटा दिया जाना चाहिए, क्योंकि आप पहले से ही परिणामों को सूचीबद्ध करते हैं। - Pim
list() बहिष्कृत और नाम बदल दिया गया है pluck()  laravel.com/docs/5.2/upgrade#upgrade-5.2.0 - Arun Code


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

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

7
2017-11-12 16:08





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

$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();
}

1
2018-03-28 22:24



यह स्मृति और भूख प्रसंस्करण है। - doncadavona


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

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

0
2017-12-07 11:11



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