Yii Framework Forum: Pasar código MySQL a generador de consultas de Yii2 - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Pasar código MySQL a generador de consultas de Yii2 Rate Topic: -----

#1 User is offline   ivan92 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 05-December 17

Posted 05 December 2017 - 10:55 AM

Hola buenos días soy nuevo con Yii2 y estoy tratando de recrear la consulta que hice en phpMyAdmin. Ya trate de varias formas pero no manda nada o da errores, el último intento fue con subconsultas pero manda error 500.

Este es el código en MySQL que sale bien:

SELECT DISTINCT CONCAT(c.NOMBRE,' ',c.APELLIDO_PATERNO,' ',c.APELLIDO_MATERNO) AS NOMBRE_CANDIDATO
    FROM tbl_candidatos c
    LEFT JOIN (SELECT  FK_CANDIDATO, count(PK_VACANTES_CANDIDATOS) AS Num_Vacantes 
               	FROM tbl_vacantes_candidatos
                	GROUP BY FK_CANDIDATO) nc 
        			ON nc.FK_CANDIDATO = c.PK_CANDIDATO
   				WHERE NOT EXISTS(SELECT 1 FROM tbl_vacantes_candidatos
                WHERE FK_VACANTE = 164
                AND FK_CANDIDATO = nc.FK_CANDIDATO);


Y esto es hasta donde me quede en el controller pero da error:

$subQuery = (new \yii\db\Query())
         ->select([
         'FK_CANDIDATO',
         'COUNT(PK_VACANTES_CANDIDATOS)'
         ])
         ->from('tbl_vacantes_candidatos')
         ->groupBy('FK_CANDIDATO')
         ->all();

      $dataProvider2 = (new \yii\db\Query())
         ->select([
         'CONCAT(c.NOMBRE," ", c.APELLIDO_PATERNO, " ",c.APELLIDO_MATERNO) AS NOMBRE'
         ])
         ->from('tbl_candidatos as c')
         ->leftJoin(['nc' => $subQuery], 'nc.FK_CANDIDATO = c.PK_CANDIDATO')
         ->distinct()
         ->all();


¿Alguien me puede enseñar como hacerlo bien?
0

#2 User is offline   Menapro 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 56
  • Joined: 27-October 16
  • Location:Burgos, Spain

Posted 10 December 2017 - 05:39 AM

En la barra de debug puedes ver la query generada y contrastarla.
Otra opción sería forzar la salida de la query de la siguiente forma.
$dataProvider2->createCommand()->getRawSql
.


No obstante veo un problema de nombres en tu código. Estás llamando a la query "dataProvider", sin embargo no es ese tipo de objeto. Un data provider se estructura así:
 
new ActiveDataProvider([
   'query'=>$tuObjetoQuery
]);


0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users