2013-08-19 29 views
6

tôi đang tìm cách để có được giá trị trung bình trên nhiều cột trên một mô hình có liên quan, một cái gì đó như thế này:Làm thế nào để trung bình nhiều cột bằng cách sử dụng Eloquent?

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

đâu truyền thông và thân thiện là một mảng các tên cột. Tuy nhiên, các chức năng tổng hợp chỉ hỗ trợ các tên cột đơn, vì vậy tôi đang thực hiện điều này:

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

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

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

Kết quả nào trong nhiều truy vấn. Bất kỳ đề xuất cho một thực hành tốt nhất ở đây?

Cảm ơn

Trả lời

9

Để tránh nhiều thắc mắc, bạn có thể sử dụng một raw database expression trong Eloquent như hình dưới đây:

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

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

Kể từ khi tên hàm tổng avg được công nhận bởi tất cả các cơ sở dữ liệu được hỗ trợ bởi Laravel, điều này sẽ không phải là một việc lớn.

+0

Cảm ơn - làm việc một điều trị. –

+0

Tuyệt vời, cảm ơn - ít typo trên DB: nguyên, nên được DB :: nguyên - cổ vũ – Leon

+0

Cảm ơn, tôi cập nhật câu trả lời của tôi. –

Các vấn đề liên quan