una poner index imagen hiddeninput form example como botones php mysql yii2

php - poner - Cómo contar y agrupar en yii2.



yii2 href url (5)

Me gustaría generar la siguiente consulta usando yii2:

SELECT COUNT(*) AS cnt FROM lead WHERE approved = 1 GROUP BY promoter_location_id, lead_type_id

Yo he tratado:

$leadsCount = Lead::find() ->where(''approved = 1'') ->groupBy([''promoter_location_id'', ''lead_type_id'']) ->count();

Lo que genera esta consulta:

SELECT COUNT(*) FROM (SELECT * FROM `lead` WHERE approved = 1 GROUP BY `promoter_location_id`, `lead_type_id`) `c`

En yii 1.x habría hecho lo siguiente:

$criteria = new CDbCriteria(); $criteria->select = ''COUNT(*) AS cnt''; $criteria->group = array(''promoter_location_id'', ''lead_type_id'');

¡Gracias!


Puede obtener el conteo usando count () en la consulta de selección

$leadCount = Lead::find() ->where([''approved''=>''1'']) ->groupBy([''promoter_location_id'', ''lead_type_id'']) ->count();

Enlace de referencia para varias funciones de selección de consulta


Si solo está interesado en el conteo, use yii/db/Query como lo mencionaron otros. No requerirá ningún cambio en su modelo:

$leadsCount = (new yii/db/Query()) ->from(''lead'') ->where(''approved = 1'') ->groupBy([''promoter_location_id'', ''lead_type_id'']) ->count();

Aquí hay un enlace a la documentación de la API Yii2


Sin agregar la propiedad $cnt al modelo

$leadsCount = Lead::find() ->select([''promoter_location_id'', ''lead_type_id'',''COUNT(*) AS cnt'']) ->where(''approved = 1'') ->groupBy([''promoter_location_id'', ''lead_type_id'']) ->createCommand()->queryAll();


Solo una nota, en caso de que ayude a alguien, que un captador usado como una propiedad es contable (mientras que si se llama como una función, devolverá 1). En este ejemplo, tengo una clase de categoría con listados unidos por listing_to_category. Para obtener listados activos y aprobados para la categoría, devuelvo un ActiveQuery, por lo tanto:

/** * @return /yii/db/ActiveQuery */ public function getListingsApprovedActive() { return $this->hasMany(Listing::className(), [''listing_id'' => ''listing_id'']) ->viaTable(''listing_to_category'', [''category_id'' => ''category_id'']) ->andWhere([''active'' => 1])->andWhere([''approved'' => 1]); }

El recuento de llamadas en la propiedad de la Categoría devolverá el recuento de registros:

count($oCat->listingsApprovedActive)

El conteo de llamadas en la función devolverá 1:

count($oCat->getListingsApprovedActive())


Solución:

$leadsCount = Lead::find() ->select([''COUNT(*) AS cnt'']) ->where(''approved = 1'') ->groupBy([''promoter_location_id'', ''lead_type_id'']) ->all();

y agrega public $cnt al modelo, en mi caso Lead.

Como también declaró Kshitiz, también podría usar yii/db/Query::createCommand() .