Hi, I have a problem returning rows from a table, using cDbcriteria->condition.
The criteria uses foreign keys,
this is the SQL generated by CDbCommand, from cDbCriteria, I suppose:
Scroll to the WHERE clause, I have a Range (from/to) fro the LastName and FirstName.
I’m using the same value in from and to, because I want only one record !
[15:22:46.851][trace][system.db.CDbCommand] Querying SQL: SELECT `t`.`id` AS `t0_c0`, `t`.`legajo_prefijo` AS `t0_c1`, `t`.`legajo_numero` AS `t0_c2`, `t`.`nombre` AS `t0_c3`, `t`.`apellido_materno` AS `t0_c4`, `t`.`apellido` AS `t0_c5`, `t`.`fecha_nacimiento` AS `t0_c6`, `t`.`direccion` AS `t0_c7`, `t`.`ciudad` AS `t0_c8`, `t`.`codigo_postal` AS `t0_c9`, `t`.`fk_provincia_id` AS `t0_c10`, `t`.`telefono` AS `t0_c11`, `t`.`fk_tipodocumento_id` AS `t0_c12`, `t`.`nro_documento` AS `t0_c13`, `t`.`sexo` AS `t0_c14`, `t`.`hermanos_escuela` AS `t0_c15`, `t`.`fk_familia_id` AS `t0_c16`, `t`.`certificado_medico` AS `t0_c17`, `t`.`activo` AS `t0_c18`, `t`.`fk_conceptobaja_id` AS `t0_c19`, `t`.`procedencia` AS `t0_c20`, `t`.`fk_estadoalumno_id` AS `t0_c21`, `t`.`observacion` AS `t0_c22`, `t`.`beca` AS `t0_c23`, `t`.`fk_grado_id` AS `t0_c24`, `fkGrado`.`id` AS `t1_c0`, `fkGrado`.`descripcion` AS `t1_c1`, `fkGrado`.`orden` AS `t1_c2`, `fkGrado`.`fk_niveltipo_id` AS `t1_c3`, `fkGrado`.`fk_cuota_def_anual_id` AS `t1_c4`, `fkCuotaDefAnual`.`id` AS `t2_c0`, `fkCuotaDefAnual`.`anio` AS `t2_c1`, `fkCuotaDefAnual`.`cantidad_cuotas_mens` AS `t2_c2`, `fkCuotaDefAnual`.`cantidad_cuotas_anual` AS `t2_c3`, `fkCuotaDefAnual`.`descripcion` AS `t2_c4`, `fkCuotaDefAnual`.`estado` AS `t2_c5` FROM `t_alumno` `t` LEFT OUTER JOIN `t_grado` `fkGrado` ON (`t`.`fk_grado_id`=`fkGrado`.`id`) LEFT OUTER JOIN `t_cuota_def_anual` `fkCuotaDefAnual` ON (`fkGrado`.`fk_cuota_def_anual_id`=`fkCuotaDefAnual`.`id`) WHERE ((t.apellido >= ":alumno_ape_desde" AND t.nombre >= ":alumno_nom_desde") AND (t.apellido <= ":alumno_ape_hasta" AND t.nombre <= ":alumno_nom_hasta")) AND (fkCuotaDefAnual.id=1) ORDER BY fk_grado_id ASC, apellido ASC, nombre ASC
This is how I create the cDbCriteria:
$crit_alumno = new CDbCriteria();
$crit_alumno->order = 'fk_grado_id ASC, apellido ASC, nombre ASC';
$crit_alumno->condition='(t.apellido >= ":alumno_ape_desde" AND t.nombre >= ":alumno_nom_desde") AND (t.apellido <= ":alumno_ape_hasta" AND t.nombre <= ":alumno_nom_hasta")';
$crit_alumno->params = array(
'alumno_ape_desde'=> $alumno_ape_desde,
'alumno_nom_desde'=> $alumno_nom_desde,
'alumno_ape_hasta'=> $alumno_ape_hasta,
'alumno_nom_hasta'=> $alumno_nom_hasta);
$crit_alumno->with = array('fkGrado',
'fkGrado.fkCuotaDefAnual'=>array('condition'=>'fkCuotaDefAnual.id='.$datos['anio']),
);
If I enter the query in mySQl it returns ONE record, witch is spected.
But NONE is returned as Active Record to the program.
$alumnos = Alumno::model()->findAll($crit_alumno);
sizeof($alumnos) is equal to 0 Zero …
Any idea where to look for the debug?
It is possible that the AR could’nt map select columns to Alumno class attributes ??
Best Regards