Como implementar sum(amount) en el query

Hola Amigos, tengo la siguiente tabla-Vista que muestra la cantidad de ventas, del item 1 al 4, el total de ventas, la proyeccion por mes y el % de cumplimiento(columna logro) agrupados por fecha:




user_id	name	        meta	Item_1	Item_2	Item_3	Item_4	total	proyect	logro	created_at

13	John Smith	50	0	0	3	2	5	30	17	1421971200

12	Jim Black	50	1	0	2	2	5	30	17	1421884800

13	John Smith	50	0	0	3	0	3	18	10	1421798400

13	John Smith	50	0	0	3	2	5	30	17	1421712000

12	Jim Black	50	0	0	2	1	3	18	10	1421539200




La consulta en php me da el resultado que busco:




("SELECT                user_id,

			ejecutivo, 

			sum(item_1) as Item_1, 

			sum(item_3) as Item_3, 

			sum(item_3) as Item_3, 

			sum(item_4) as Item_4, 

			sum(total) as Total,

			sum(proyect) as Proyect, 

			meta, 

			sum(logro) as Logro			

			FROM metaxuser WHERE created_at BETWEEN '$date_from' 

		  	AND  '$date_to' GROUP by user_id")






Pero al tratar de pasar los resultados al gridview es en donde estoy trabado. De acuerdo a lo que entendido en la documentación he probado con lo siguiente;




$query = Metaxuser::find()

            ->select(['name', 

                sum('item_1'), 

                sum('item_2'), 

                sum('item_3'), 

                sum('item_4'), 

                sum('total'),

                sum('proyect'), 

                'metamovil'])           

            ->where(['between','created_at',$qString1,$qString2])

            ->groupBy(['user_id', 'user_id']);



y esto me arroja "Call to undefined function app\models\sum()"

Agradeceré cualquier sugerencia. Gracias de antemano

el select ponlo como un string:




$query = Metaxuser::find()

            ->select("name, 

                sum('item_1'), 

                sum('item_2'), 

                sum('item_3'), 

                sum('item_4'), 

                sum('total'),

                sum('proyect'), 

                metamovil")           

            ->where(['between','created_at',$qString1,$qString2])

            ->groupBy(['user_id', 'user_id']);



Gracias por contestar pero me sigue dando el mensaje de error anterior. También trate de hacerlo con command create con el mismo resultado.

pero sin las comilla simples que me se me ha pasado:




$query = Metaxuser::find()

            ->select("name, 

                sum(item_1), 

                sum(item_2), 

                sum(item_3), 

                sum(item_4), 

                sum(total),

                sum(proyect), 

                metamovil")           

            ->where(['between','created_at',$qString1,$qString2])

            ->groupBy(['user_id', 'user_id']);



Ahora me arroja un error #4

Este es el código completo:




public function search($params)

    {

        $date_d = Yii::$app->getRequest()->getQueryParam('date_d');

        $date_h = Yii::$app->getRequest()->getQueryParam('date_h');

        

        if ($date_d == null)

        {

            $date_d = date('01-m-Y'); 

            $date_h = date('t-m-Y');  

        }

        

        $qString1= strtotime($date_d); 

        $qString2= strtotime($date_h);


        $query = Metaxuser::find()

            ->select("ejecuyivo, 

                sum(item1), 

                sum(item2), 

                sum(item3), 

                sum(item4), 

                sum(total_a),

                sum(proyect_a), 

                metam,

                sum(item5), 

                sum(item6), 

                sum(item7), 

                sum(total_<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />, 

                sum(proyect_<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />,

                meta_b               

                ")           

            ->where(['between','created_at',$qString1,$qString2])

            ->groupBy(['user_id', 'user_id']);


        $dataProvider = new ActiveDataProvider([

            'query' => $query,

            'pagination' => [

                'pageSize' => 20,

                ],

        ]);


        $this->load($params);


        if (!$this->validate()) {

            

            return $dataProvider;

        }


        $query->andFilterWhere([

            'user_id' => $this->ejecutivo,

            'item1' => $this->item1,

            'item2' => $this->item2,

            'item3' => $this->item3,

            'item4' => $this->item4,           

            'total_a' => $this->total_a,

            'proyect_a' => $this->proyect_a,           

            'item5' => $this->item5,

            'item6' => $this->item6,

            'total_b' => $this->total_b,

            'proyect_b' => $this->proyect_b,                   

            'created_at' => $this->created_at,

        ]);


        $query->andFilterWhere(['like', 'ejecutivo', $this->ejecutivo]);


        return $dataProvider;

    }

}      




El error no da mucha ayuda, intenta simplificar la query hasta que salga bien y luego agrega más campos y condiciones hasta tenerlo todo.




$query = Metaxuser::find()

            ->select("name,

                sum(item_1) as item1, 

                sum(item_2) as item2, 

                sum(item_3) as item3, 

                sum(item_4) as item4, 

                sum(total) as total,

                sum(proyect) as proyect, 

                metamovil");



Partiendo de aquí asegurate de que todos los atributos existen en el modelo, comenta el where, el group by y los filtros y comprueba que se genera el gridview en la vista.

Si algo falla aquí el error debería ser claro.

Agrega todos los campos que necesites y vuelve a comprobar que esta bien.

Luego haz lo mismo agregando primero el where, luego el order by.

Si puedes mira en la herramienta de debug de yii las querys que se generan y finalmente agrega los filtros.

El error debería estar más localizado ahora.

Por cierto el error #4 creo que sale si estas en producción, si quieres ver una explicación más detallada de los errores ponte en modo desarrollo.