S. M. Shahinul Islam
S. M. Shahinul Islam

Reputation: 2800

Eloquent - Sums of multiple columns in an array

If I get sum of a column using Model::sum('column') , How can I get sums of multiple column returned in an array?

Upvotes: 0

Views: 1117

Answers (2)

lukasgeiter
lukasgeiter

Reputation: 152860

Using sum() for multiple columns is inefficient because it will trigger multiple queries. Add this to your model:

public static function sums($columns){
    $instance = new static;
    $columns = is_array($columns) ? $columns : func_get_args();

    $selects = array_map(function($column){
        return DB::raw('SUM('.$column.') AS '.$column);
    }, $columns);

    return $instance->select($selects)->first();
}

Usage:

Model::sums(array('column', 'foo', 'bar'));
// or
Model::sums('column', 'foo', 'bar');

Upvotes: 3

Laurence
Laurence

Reputation: 60048

Can you just do

$total = Model::sum('column1') + Model::sum('column2') + Model::sum('column3');

Edit:

You could just make a function in your Model

class Model extends Eloquent {
     public static function getColumn($column_name) {
          return Model::sum($column_name);
     }
}

Then in your view you just do

$value->getSum('column');

Upvotes: 0

Related Questions