how to sum multiple columns in a table ?

I have to do sum per column then add them all up. like this





$totalHours = Entry::find()->where(['type' => $type])->sum('st_hours') +

    Entry::find()->where(['type' => $type])->sum('ot_hours') +

    Entry::find()->where(['type' => $type])->sum('dt_hours') +

    Entry::find()->where(['type' => $type])->sum('travel_time_hours');




Bad thing is I have to make 4 sql queries. Can it be done in 1 query ?

Active Record just complicates things when you only need a scalar value, try to use yii\db\Query instead:




$totalHours = (new \yii\db\Query())

  ->select('SUM(st_hours) + SUM(ot_hours) + SUM(dt_hours) + SUM(travel_time_hours)')

  ->from(Entry::tableName())

  ->where(['type' => $type])

  ->scalar();



EDIT:

On second thought, it might be possible with ActiveQuery (not tested):




Entry::find()

  ->where(['type' => $type])

  ->sum('st_hours + ot_hours + dt_hours + travel_time_hours');



both work. Thanks alot

I tweak the ActiveQuery abit by ‘quoting’ the column name as suggested (http://www.yiiframework.com/doc-2.0/yii-db-query.html#sum()-detail)




Entry::find()

  ->where(['type' => $type])

  ->sum('[[st_hours]] + [[ot_hours]] + [[dt_hours]] + [[travel_time_hours]]');