Me respondo yo mismo, al usar el comportamiento "Containable", se le puede
indicar que no ponga los campos que requiere de manera automatica al final
mi funcion quedo asi:
public function estYearMonthGen($year) {
$this->recursive = -1;
$this->Behaviors->load('Containable',array('autoFields' => false));
$this->contain(array('Persona'=>array('genero')));
$data = $this->find('all',array(
'fields'=>array('date_part(\'YEAR\',"Postulante".created)
AS "Postulante__year"', 'date_part(\'MONTH\',"Postulante".created) AS
"Postulante__month"', '"Persona".genero AS
"Postulante__genero"','count("Postulante".id) AS "Postulante__cuenta"'),
'group'=>array('Persona.genero','date_part(\'YEAR\',"Postulante".created)','date_part(\'MONTH\',"Postulante".created)'),
'conditions' => array('Postulante.estado' => 1),
'order' =>
array('date_part(\'YEAR\',"Postulante".created)',
'date_part(\'MONTH\',"Postulante".created)')
)
);
return $data;
}
Es para crear una estadistica por año, mes y genero de los postulantes.
Un abrazo,
*Aland Laines Calonge*
Twitter: @lainessolutions
Comunidad CakePHP en Español
Google+<https://plus.google.com/communities/106077549014949879129>
http://about.me/aland.laines
2014-02-04 Aland Laines <[email protected]>:
>
> Tengo una consulta en el find de este tipo:
>
> $data = $this->find('all',array(
>
> 'fields'=>array('date_part(\'YEAR\',"Postulante".created)',
> 'date_part(\'MONTH\',"Postulante".created)',
> 'Persona.genero','count("Postulante".id)'),
>
> 'group'=>array('Persona.genero','date_part(\'YEAR\',"Postulante".created)','date_part(\'MONTH\',"Postulante".created)'),
> 'conditions' => array('Postulante.estado' => 1),
> 'order' =>
> array('date_part(\'YEAR\',"Postulante".created)',
> 'date_part(\'MONTH\',"Postulante".created)')
> )
> );
>
> Pero a pesar que no le indico en "fields" que me traiga el id de
> postulante, igual lo aparece, alguien sabe como excluirselo?
>
> Esto me devuelve la consulta:
>
> *Error: * SQLSTATE[42803]: Grouping error: 7 ERROR: la columna
> «Postulante.id» debe aparecer en la cláusula GROUP BY o ser usada en una
> función de agregación LINE 1: ...ro" AS "Persona__genero",
> count("Postulante".id), "Postulant... ^
>
> *SQL Query: * SELECT date_part('YEAR',"Postulante".created),
> date_part('MONTH',"Postulante".created), "Persona"."genero" AS
> "Persona__genero", count("Postulante".id), "Postulante"."id" AS
> "Postulante__id" FROM "produccion"."postulantes" AS "Postulante" LEFT JOIN
> "produccion"."personas" AS "Persona" ON ("Postulante"."persona_id" =
> "Persona"."id") LEFT JOIN "produccion"."ubigeos" AS "Ubigeo" ON
> ("Postulante"."ubigeo_id" = "Ubigeo"."id") WHERE "Postulante"."estado" = 1
> GROUP BY "Persona"."genero", date_part('YEAR',"Postulante"."created"),
> date_part('MONTH',"Postulante"."created") ORDER BY
> date_part('YEAR',"Postulante".created) ASC,
> date_part('MONTH',"Postulante".created) ASC
>
> *Notice: * If you want to customize this error message, create
> postulantes\View\Errors\pdo_error.ctp
> Muchas gracias, por su ayuda,
>
> *Aland Laines Calonge*
> Twitter: @lainessolutions
> Comunidad CakePHP en Español
> Google+<https://plus.google.com/communities/106077549014949879129>
> http://about.me/aland.laines
>
>
--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos
de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos
electrónicos, envía un correo electrónico a
[email protected].
Para publicar una entrada en este grupo, envía un correo electrónico a
[email protected].
Visita este grupo en http://groups.google.com/group/cakephp-es.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.