En este tutorial vamos a ver como realizar diferentes consultas utlizando un modelo tipo de una tabla de la base de datos en una aplicación realizada con CakePHP.
Vamos a realizar diferentes consultas a una tabla de ejemplo ‘Personas’, obteniendo diferentes resultados. Comenzaremos por las consultas más sencillas y luego iremos añadiendo consultas a base de datos más complejas.
Consulta pidiendo todas las filas de una tabla
Con esta consulta obtendremos todas las personas que están almacenadas en la tabla:
1 $todasPersonas = $this->Personas->find('all');
Añadir diferentes criterios de búsqueda
CakePHP entiende diferentes tipos de parámetros que serán utlizados para crear la consulta a la base de datos, rellenando en ella los diferentes criterios de búsqueda.
Vamos a ver unos cuantos ejemplos para crear consultas cada vez más complejas con diferentes criterios de búsqueda:
- Incluir un campo de búsqueda en la consulta: en este caso vamos a buscar las personas cuyo ‘nombre‘ coincida con el que pasamos como parámetros.
1 $opciones=array('conditions' => array('Personas.nombre' => "David"));
2 3 $personasEncontradas = $this->Personas->find('all',$opciones);
Ahora estamos haciendo la consulta indicando como criterio de búsqueda el nombre, por lo que se generará una consulta ‘select’ con la siguiente condición:
1 WHERE Personas.nombre='David';
- Consultas con varias condiciones unidas por la etiqueta AND: ahora realizaremos la búsqueda pero filtrando por varios criterios que deberán cumplirse. Para elo utlizaremos debemos añadir al array de condiciones todas las que queramos que se apliquen a la consulta. A la consulta anterior, vamos a añadirle otro criterio de búsqueda que filtre por la ‘edad‘:
1 $opciones=array('conditions' => array('Personas.nombre' => "David", "Personas.edad" => '27'));
2 3 $personasEncontradas = $this->Personas->find('all',$opciones);
Ahora estamos haciendo la consulta indicando como criterio de búsqueda el nombre y la edad, por lo que se generará una consulta ‘select’ con la siguiente condición:
1 WHERE Personas.nombre='David' AND Personas.edad='27';
- Incluir varias condiciones separadas por la etiqueta OR: ahora realizaremos la búsqueda pero filtrando por varios criterios esta vez con la etiqueta OR, por lo que con que se cumpla un criterio ya devolverá el resultado. Para elo utlizaremos debemos añadir al array de condiciones todas las que queramos que se apliquen a la consulta. A la consulta anterior, vamos a añadirle otro criterio de búsqueda que filtre por la ‘edad‘:
Ahora estamos haciendo la consulta indicando como criterio de búsqueda el nombre y/o la edad, por lo que se generará una consulta ‘select’ con la siguiente condición:1 $opciones=array(find('all', array('conditions'=>
2 array('OR'=>
3 array('Personas.nombre' => 'David',
4 'Personas.edad' => '27')
5 )));
6 7 $personasEncontradas = $this->Personas->find('all',$opciones);
1 WHERE Personas.nombre='David' OR Personas.edad='27';
- Consultas con indicadores de mayor, menor o igual que: también se pueden hacer consultas utlizando cualquiera de estos caracteres de comparación ‘<>, <=, >=, >,<‘. Crearemos una consulta de ejemplo que busque todas las personas cuya edad esté entre 20 y 30 años y midan ‘170’:
Ahora estamos haciendo la consulta indicando como criterio de búsqueda un rango de edades y la altura, por lo que se generará una consulta ‘select’ con la siguiente condición:1 $opciones=array(find('all', array('conditions'=>
2 array('Persona.edad >=' => '20',
3 'Persona.edad <=' => '30',
4 'Persona.altura' => '170')
5 )));
6 7 $personasEncontradas = $this->Personas->find('all',$opciones);
1 WHERE Personas.edad>='David' AND Personas.edad<=30 AND Personas.altura='170';
- Utilizar la etiqueta ‘IN‘ como criterio de búsqueda: vamos a hacer una consulta en la que buscaremos personas cuya altura se encuentre entre ciertas alturas que serán indicadas creando una array. Por tanto, para hacer consultas de este tipo utilizando ‘IN‘ debemos hacer lo siguiente:
1 $alturas=array(170,180,190);
2 $opciones=array(find('all', array('conditions'=>array('Persona.altura>=' => $alturas))));
3 4 $personasEncontradas = $this->Personas->find('all',$opciones);
La consulta que se generará tendrá el siguiente parámetro de comparación:
1 WHERE Personas.altura IN (170,180,190);
- Consultas utlizando NOT IN: ahora realizaremos la búsqueda como en el paso anterior pero utilizando en este caso ‘NOT IN’. Para ello deberemos pasar los siguientes parámetros, para que devuelva las personas cuyas alturas no se coincidan con las que se pasan por parámetro:
En este ejemplo la consulta se generá así:1 $alturas=array(170,180,190);
2 $opciones=array(find('all', array('conditions'=>
3 array('NOT'=> array('Personas.altura' => $alturas) )));
4 5 $personasEncontradas = $this->Personas->find('all',$opciones);
1 WHERE Personas.altura NOT IN (170,180,190);
- Consultas haciendo uso del comparador ‘BETWEEN‘: ahora vamos a buscar personas cuya edad se encuentre en un rango determinado, entre 15 y 45 años. Para ello utilizaremos los siguientes parámetros:
En este caso la consulta generada tendría este formato:MySQL |copy code |?1 $personasFiltradas = $this->Personas->find('all',array('conditions'=>array(array('Personas.edad BETWEEN ? AND ?' => array(15,45)))))
1 WHERE Personas.edad BETWEEN 15 AND 45;
Todas estos tipos de consultas se pueden combinar para crear consultas más complejas. Si tenéis alguna duda de cómo crear algún tipo de consulta poneros en contacto con nosotros.
Deja tu comentario