Consultas
A continuación veremos una referencia de los métodos que posee la clase ActiveRecord y su funcionalidad respectiva. Éstos se encuentran organizados alfabéticamente:
Sumario
Consulta
Métodos para hacer consulta de Registros:
distinct
Sintaxis
distinct([string $atributo_entidad], [“conditions: …], [“order: …”], [“limit: …“], [“column: …”])
Este método ejecuta una consulta de distinción única en la entidad, funciona igual que un “select unique campo” viéndolo desde la perspectiva del SQL. El objetivo es devolver un array con los valores únicos del campo especificado como parámetro.
Ejemplo
$unicos = $this->Usuarios->distinct(“estado”)
# array(‘A’, ‘I’, ‘N’)
Los parámetros conditions, order y limit funcionan idénticamente que en la función find y permiten modificar la forma o los mismos valores de retorno devueltos por ésta.
find_all_by_sql (string $sql)
Este método nos permite hacer una consulta por medio de un SQL y el resultado devuelto es un array de objetos de la misma clase con los valores de los registros en estos. La idea es que el uso de este método no debería ser común en nuestras aplicaciones ya que ActiveRecord se encarga de eliminar el uso del SQL en gran porcentaje, pero hay momentos en que es necesario que seamos más específicos y tengamos que recurrir al uso de este.
Ejemplo:
foreach($Usuarios->find_all_by_sql("select * from usuarios
where codigo not in (select codigo
from ingreso)") as $usuario){
print $Usuario->nombre;
}
Este ejemplo consultamos todos los usuarios con una sentencia where especial e imprimimos sus nombres. La idea es que los usuarios consultados no pueden estar en la entidad ingreso.
find_by_sql (string $sql)
Este método nos permite hacer una consulta por medio de un SQL y el resultado devuelto es un objeto que representa el resultado encontrado. La idea es que el uso de este método no debería ser común en nuestras aplicaciones ya que ActiveRecord se encarga de eliminar el uso del SQL en gran porcentaje, pero hay momentos en que es necesario que seamos más específicos y tengamos que recurrir al uso de este.
Ejemplo:
$usuario = $Usuarios->find_by_sql("select * from usuarios
where codigo not in (select codigo
from ingreso) limit 1");
print $Usuario->nombre;
Este ejemplo consultamos todos los usuarios con una sentencia where especial e imprimimos sus nombres. La idea es que el usuario consultado no puede estar en la entidad ingreso.
find_first
Sintaxis:
find_first([integer $id], [“conditions: …”], [“order: …”], [“limit: …], [“columns: …”])
El método “find_first” devuelve el primer registro de una entidad o la primera ocurrencia de acuerdo a unos criterios de búsqueda u ordenamiento. Los parámetros son todos opcionales y su orden no es relevante, cuando se invoca sin parámetros devuelve el primer registro insertado en la entidad. Este método es muy flexible y puede ser usado de muchas formas:
Ejemplo:
$this->Usuarios->find_first(“conditions: estado=’A’ ”,“order: fecha desc”);
En este ejemplo buscamos el primer registro cuyo estado sea igual a “A” y ordenado descendentemente, el resultado de éste, se carga a la variable $Usuarios e igualmente devuelve una instancia del mismo objeto ActiveRecord en caso de éxito o false en caso contrario.
Con el método find_first podemos buscar un registro en particular a partir de su id de esta forma:
$this->Usuarios->find_first(123);
Así obtenemos el registro 123 e igualmente devuelve una instancia del mismo objeto ActiveRecord en caso de éxito o false en caso contrario. Kumbia genera una advertencia cuando los criterios de búsqueda para find_first devuelven más de un registro, para esto podemos forzar que se devuelva solamente uno, mediante el parámetro limit, de esta forma:
$this->Usuarios->find_first(“conditions: estado=’A’ ”,“limit: 1”);
Cuando queremos consultar sólo algunos de los atributos de la entidad podemos utilizar el parámetro columns así:
$this->Usuarios->find_first(“columns: nombre, estado”);
Cuando especificamos el primer parámetro de tipo string, ActiveRecord asumirá que son las condiciones de búsqueda para find_first, así:
$Usuarios->find_first(“estado=’A’”);
De esta forma podemos también deducir que estas 2 sentencias arrojarían el mismo resultado:
$this->Usuarios->find_first(“id=’123’”);
$this->Usuarios->find_first(123);
find
Sintaxis
find([integer $id], [“conditions: …”], [“order: …”], [“limit: …], [“columns: …”])
El método “find” es el principal método de búsqueda de ActiveRecord, devuelve todas los registros de una entidad o el conjunto de ocurrencias de acuerdo a unos criterios de búsqueda. Los parámetros son todos opcionales y su orden no es relevante, incluso pueden ser combinados u omitidos si es necesario. Cuando se invoca sin parámetros devuelve todos los registros en la entidad.
No hay que olvidarse de incluir un espacio después de los dos puntos (:) en cada parámetro.
Ejemplo:
foreach($Usuarios->find(“conditions: estado=’A’”,“order: fecha desc”) as $usuario){
print $usuario->nombre;
}//fin del foreach
En este ejemplo buscamos todos los registros cuyo estado sea igual a “A” y devuelva éstos ordenados descendentemente, el resultado de este es un array de objetos de la misma clase con los valores de los registros cargados en ellos, en caso de no hayan registros devuelve un array vacío.
Con el método find podemos buscar un registro en particular a partir de su id de esta forma:
$this->Usuarios->find(123);
Así obtenemos el registro 123 e igualmente devuelve una instancia del mismo objeto ActiveRecord en caso de éxito o false en caso contrario. Como es un solo registro no devuelve un array, sino que los valores de éste se cargan en la misma variable si existe el registro.
Para limitar el número de registros devueltos, podemos usar el parámetro limit, así:
$this->Usuarios->find(“conditions: estado=’A’ ”,“limit: 5”);
Cuando queremos consultar sólo algunos de los atributos de la entidad podemos utilizar el parámetro columns así:
$Usuarios->find(“columns: nombre, estado”);
Cuando especificamos el primer parámetro de tipo string, ActiveRecord asumirá que son las condiciones de búsqueda para find, así:
$this->Usuarios->find (“estado=’A’”);
Se puede utilizar la propiedad count para saber cuántos registros fueron devueltos en la búsqueda.
Nota: No es necesario usar find('id: $id') para el find, se usa directament find($id)
limit
ActiveRecord permite realizar búsquedas limitando la cantidad de resultados que serán devueltos, no es un método es un parámetro que recibe las consultas.
$this->Preguntas->find('limit:5', 'offset: 1');
Esta consulta busca todas las Preguntas limitando la cantidad de resultados a devolver en este caso 5.
select_one(string $select_query)
Este método nos permite hacer ciertas consultas como ejecutar funciones en el motor de base de datos sabiendo que éstas devuelven un solo registro.
$this->Usuarios->select_one(“current_time”)
En el ejemplo queremos saber la hora actual del servidor devuelta desde MySQL así que podemos usar este método para esto.
select_one(string $select_query) (static)
Este método nos permite hacer ciertas consultas como ejecutar funciones en el motor de base de datos, sabiendo que éstas devuelven un solo registro. Este método se puede llamar de forma estática, esto significa que no es necesario que haya una instancia de ActiveRecord para hacer el llamado.
ActiveRecord::select_one(“current_time”)
En el ejemplo queremos saber la hora actual del servidor devuelta desde MySQL así que podemos usar este método para esto.
exists
Este método nos permite verificar si el registro existe o no en la base de datos mediante su id o una condición.
$Usuarios->id = 3;
if($Usuarios->exists()){
print "Ya existe el id = 3";
}//fin del if
$Usuarios->exists(“nombre='Juan Perez'”)
$Usuarios->exists(2); // Un Usuario con id->2?
find_all_by
Este método nos permite realizar una búsqueda por algún campo
$resultados = $Productos->find_all_by(“categoria”, “Insumos”);
find_by_*campo*
Este método nos permite realizar una búsqueda por algún campo usando el nombre del método como nombre de éste. Devuelve un solo registro.
$resultado = $Productos->find_by_categoria(“Insumos”);
find_all_by_*campo*
Este método nos permite realizar una búsqueda por algún campo usando el nombre del método como nombre de éste. Devuelve todos los registros que coincidan con la búsqueda.
$resultados = $Productos->find_all_by_categoria(“Insumos”);