2013-08-19 11 views
6

मैं एक संबंधित मॉडल पर, कुछ इस तरह एकाधिक स्तंभों में औसत मूल्य प्राप्त करने के लिए देख रहा हूँ:Eloquent का उपयोग कर एकाधिक कॉलम औसत कैसे करें?

$this->reviews()->avg('communication', 'friendliness') 

संचार और मित्रता कहाँ स्तंभ नाम की एक सरणी है। हालांकि ऐसा लगता है कि कुल कार्य केवल कॉलम नामों का समर्थन करते हैं, इसलिए मैं यह कर रहा हूं:

$attributes = array('communication', 'friendliness'); 
$score = array(); 

foreach ($attributes as $attribute) 
{ 
    $score[] = $this->reviews()->avg($attribute); 
} 

return round(array_sum($score)/sizeof($attributes), 1); 

जिसके परिणामस्वरूप कई प्रश्न हैं। यहां एक सर्वोत्तम अभ्यास के लिए कोई सुझाव?

$averages = $this->reviews() 
    ->select(DB::raw('avg(communication) c, avg(friendliness) f')) 
    ->first(); 

echo $averages->c; 
echo $averages->f; 

के बाद से एकीकृत फ़ंक्शन नाम avg Laravel द्वारा सभी समर्थित डेटाबेस द्वारा मान्यता प्राप्त है, इस वसीयत:

धन्यवाद

उत्तर

9

कई प्रश्नों से बचने के लिए आप के रूप में नीचे दिखाया गया Eloquent के भीतर एक raw database expression उपयोग कर सकते हैं एक बड़ा सौदा नहीं है।

+0

धन्यवाद - एक इलाज करता है। –

+0

ग्रेट, धन्यवाद - डीबी पर थोड़ा टाइपो: कच्चा, डीबी होना चाहिए :: कच्चे - चीयर्स – Leon

+0

धन्यवाद, मैंने अपना जवाब अपडेट किया। –

संबंधित मुद्दे