Diferencia entre revisiones de «CRUD»

De KumbiaPHP Framework Wiki
Línea 59: Línea 59:
 
Importante  
 
Importante  
 
Advertencia: En Oracle la funcionalidad limit podría no funcionar como se espera. Utilice la condición rownum < numero_filas para hacer esto.
 
Advertencia: En Oracle la funcionalidad limit podría no funcionar como se espera. Utilice la condición rownum < numero_filas para hacer esto.
 +
 +
Ejemplo
 +
<source lang=php>
 +
#Buscar los productos en estado = ‘$estado’ ordenado por fecha y valor
 +
foreach($Productos->find_first(“conditions: estado=’$estado’and rownum <= 30”,
 +
  “order: fecha Desc, valor”) as $prod){
 +
      print $prod->nombre;
 +
  }
 +
</source>
  
 
==Promedio, Contando, Sumando, Mínimo y Máximo==
 
==Promedio, Contando, Sumando, Mínimo y Máximo==

Revisión del 16:54 7 mar 2010

Create (Crear), Read (Leer), Update (Actualizar), Delete (Borrar)

ActiveRecord implementa automáticamente las cuatro operaciones básicas sobre una tabla: Crear, Leer, Actualizar y Borrar.

Consultando Registros

Para consultar en una base de datos tenemos que tener claro qué vamos a buscar, es decir definir un criterio de búsqueda. Este criterio le permite a ActiveRecord devolver el conjunto de objetos que coincidan con este y así poder trabajar esa información.

El camino más sencillo para encontrar determinado registro en una tabla es especificar su llave primaria. En Kumbia los modelos soportan el método ‘find’, así como otros métodos complementarios para consultas. Este método permite consultar registros a partir de sus llaves primarias así como con parámetros. Nótese que este método devuelve el valor boolean false en caso de no encontrar registros que coincidan con la búsqueda.

Ejemplo

# Buscar el Producto con id = 38
$producto = $Productos->find(38);
print $producto->nombre; # Imprime el nombre del producto id=38

Igualmente necesitamos hacer consultas a partir de otros atributos del modelo no solamente a partir de su llave primaria. ActiveRecord proporciona una serie de parámetros para crear consultas especializadas que nos permitan acceder a los registros que necesitamos. Para ilustrar esto veamos:

Ejemplo

# Buscar los Productos en estado = ‘C’ y cuyo valor sea menor a 15000
foreach( $Productos->find(“estado=’C’ and valor<15000” ) 
print $producto->nombre;
}
  
#Buscar el primer producto en estado = ‘C’ ordenado por fecha
foreach($Productos->find_first(“conditions: estado=’C’”,
    “order: fecha desc”) as $producto){
print $producto->nombre;
}
  
#Buscar el primer producto en estado = ‘$estado’ ordenado por fecha
$producto = $Productos->find_first(“conditions: estado=’$estado’”,
    “order: fecha desc”);
print $producto->nombre;

Cabe destacar que el uso de ‘find_first’ devuelve el primer registro que coincida con la búsqueda y ‘find’ todos los registros.

El poderoso Find

Aunque aparentemente ActiveRecord elimina el uso del SQL en un gran porcentaje, realmente no lo es, simplemente crea una capa de abstracción superior que puede llegar a limitarse en determinados momentos cuando las búsquedas se empiezan a volver complejas. Kumbia PHP Framework permite el uso del lenguaje SQL ya sea utilizando una instancia de ActiveRecord o accediendo a la capa de abstracción de datos como ultimo recurso (lo cual no es recomendado). El lenguaje SQL es una poderosa herramienta que no podemos dejar de usar y que debemos tener a la mano en uno de esos casos extremos en lo demás ActiveRecord se encargará de facilitarnos la vida en gran medida.

Sin parámetros extra ActiveRecord convierte una consulta en un select from estándar pero podemos agregar otras opciones para especializar la búsqueda y obtener más detalladamente lo que buscamos.

El parámetro conditions: permite especificar un conjunto de condiciones que van a actuar como el ‘where’ de nuestra consulta. Igualmente ActiveRecord no garantiza que los registros sean devueltos en el orden requerido asi que podemos utilizar order: para realizar el ordenamiento. El parámetro limit: nos permite especificar el número máximo de registros a ser devueltos.

Ejemplo

#Buscar los productos en estado = ‘$estado’ ordenado por fecha y valor
foreach($Productos->find_first(“conditions: estado=’$estado’”,
   “order: fecha Desc, valor”,
   “limit: 30”) as $prod){
       print $prod->nombre;
   }

Importante Advertencia: En Oracle la funcionalidad limit podría no funcionar como se espera. Utilice la condición rownum < numero_filas para hacer esto.

Ejemplo

#Buscar los productos en estado = ‘$estado’ ordenado por fecha y valor
foreach($Productos->find_first(“conditions: estado=’$estado’and rownum <= 30”,
   “order: fecha Desc, valor”) as $prod){
       print $prod->nombre;
   }

Promedio, Contando, Sumando, Mínimo y Máximo

Una de las tareas más comunes es el uso de contadores y sumadores de registros en consultas, así como el uso de otras funciones de agrupación. El método de conteo de registros se llama count y puede recibir como parámetros condiciones de este.

Ejemplo

#Cuantos productos hay?
print Productos->count();
 
#Cuantos productos hay con estado = 'A'?
print Productos->count(“estado='A'”);

Las funciones de agrupación suma, mínimo, promedio y máximo, son utilizadas de esta forma:

Ejemplo

#Cuantos suma el valor de todos los productos?
print Productos->sum(“valor”);
 
#Cuantos suma el valor de los productos activos?
print Productos->sum(“valor”, “conditions: estado='A'”);
  
#Promedio del valor de los productos activos?
print Productos->average(“valor”, “conditions: estado='A'”);
  
#El valor mínimo de los productos activos?
print Productos->minumum(“valor”, “conditions: estado='A'”);
 
#El valor máximo de los productos activos?
print Productos->maximum(“valor”, “conditions: estado='A'”);

Actualizando Registros existentes

Realmente no hay mucho que decir acerca de cómo actualizar registros. Si tienes un objeto ActiveRecord (por ejemplo un producto de la base de datos), puedes actualizar llamando su método save(). Si este objeto ha sido leído de la base de datos puedes actualizar el registro correspondiente mediante save, en caso de que no exista se insertará el un registro nuevo.

Ejemplo

$producto = $Productos->find(123);
$producto->nombre = "Televisor";
$producto->save();

Otra forma de actualizar registros es utilizar el método update() de esta forma:

Ejemplo

$producto = $Productos->find(456);
$producto->update(“nombre: Televisor”, “cantidad: 2”);
$producto->save();

Borrando Registros

Tampoco hay mucho que decir acerca de cómo eliminar registros. Si tienes un objeto ActiveRecord (por ejemplo un producto de la base de datos), puedes eliminarlo llamando a su método delete().

Ejemplo

$Productos->delete(123);

Propiedades Soportadas

Propiedad Descripción
$fields Listado de Campos de la tabla que han sido mapeados
$count Conteo del ultimo Resultado de un Select
$primary_key Listado de columnas que conforman la llave primaria
$non_primary Listado de columnas que no son llave primaria
$not_null Listado de campos que son not_null
$attributes_names Nombres de todos los campos que han sido mapeados