Diferencia entre revisiones de «CRUD»

De KumbiaPHP Framework Wiki
Línea 8: Línea 8:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$album = new Album();
 
$album = new Album();
 
$album->nombre = “Take Off Your Pants and Jacket”;
 
$album->nombre = “Take Off Your Pants and Jacket”;
 
$album->valor = 40000;
 
$album->valor = 40000;
 
$album->save();
 
$album->save();
</pre>
+
</source>
  
 
Adicionalmente a esto puede utilizar el método ‘create’ así como los métodos como ‘createfromrequest’ para crear nuevos registros.
 
Adicionalmente a esto puede utilizar el método ‘create’ así como los métodos como ‘createfromrequest’ para crear nuevos registros.
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$album = new Album();
 
$album = new Album();
 
$album->nombre = “Take Off Your Pants and Jacket”;
 
$album->nombre = “Take Off Your Pants and Jacket”;
Línea 35: Línea 35:
 
     “valor” => 40000
 
     “valor” => 40000
 
));
 
));
</pre>
+
</source>
  
 
También podemos crear un Nuevo registro a partir de los valores de $_REQUEST
 
También podemos crear un Nuevo registro a partir de los valores de $_REQUEST
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$album = new Album();
 
$album = new Album();
 
$album->create_from_request();
 
$album->create_from_request();
</pre>
+
</source>
  
 
==Consultando Registros==
 
==Consultando Registros==
Línea 52: Línea 52:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
# Buscar el Producto con id = 38
 
# Buscar el Producto con id = 38
 
$producto = $Productos->find(38);
 
$producto = $Productos->find(38);
 
print $producto->nombre; # Imprime el nombre del producto id=38
 
print $producto->nombre; # Imprime el nombre del producto id=38
</pre>
+
</source>
  
 
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:
 
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
 
Ejemplo
<pre>
+
<source lang=php>
 
# Buscar los Productos en estado = ‘C’ y cuyo valor sea menor a 15000
 
# Buscar los Productos en estado = ‘C’ y cuyo valor sea menor a 15000
 
foreach($Productos->find(“estado=’C’ and valor
 
foreach($Productos->find(“estado=’C’ and valor
Línea 77: Línea 77:
 
     “order: fecha desc”);
 
     “order: fecha desc”);
 
print $producto->nombre;
 
print $producto->nombre;
</pre>
+
</source>
  
 
Cabe destacar que el uso de ‘find_first’ devuelve el primer registro que coincida con la búsqueda y ‘find’ todos los registros.
 
Cabe destacar que el uso de ‘find_first’ devuelve el primer registro que coincida con la búsqueda y ‘find’ todos los registros.
Línea 90: Línea 90:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
#Buscar los productos en estado = ‘$estado’ ordenado por fecha y valor
 
#Buscar los productos en estado = ‘$estado’ ordenado por fecha y valor
 
foreach($Productos->find_first(“conditions: estado=’$estado’”,
 
foreach($Productos->find_first(“conditions: estado=’$estado’”,
Línea 97: Línea 97:
 
       print $prod->nombre;
 
       print $prod->nombre;
 
   }
 
   }
</pre>
+
</source>
  
 
Importante  
 
Importante  
Línea 107: Línea 107:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
#Cuantos productos hay?
 
#Cuantos productos hay?
 
print Productos->count();
 
print Productos->count();
Línea 113: Línea 113:
 
#Cuantos productos hay con estado = 'A'?
 
#Cuantos productos hay con estado = 'A'?
 
print Productos->count(“estado='A'”);
 
print Productos->count(“estado='A'”);
</pre>
+
</source>
  
 
Las funciones de agrupación suma, mínimo, promedio y máximo, son utilizadas de esta forma:
 
Las funciones de agrupación suma, mínimo, promedio y máximo, son utilizadas de esta forma:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
#Cuantos suma el valor de todos los productos?
 
#Cuantos suma el valor de todos los productos?
 
print Productos->sum(“valor”);
 
print Productos->sum(“valor”);
Línea 133: Línea 133:
 
#El valor máximo de los productos activos?
 
#El valor máximo de los productos activos?
 
print Productos->maximum(“valor”, “conditions: estado='A'”);
 
print Productos->maximum(“valor”, “conditions: estado='A'”);
</pre>
+
</source>
  
 
==Actualizando Registros existentes==
 
==Actualizando Registros existentes==
Línea 140: Línea 140:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$producto = $Productos->find(123);
 
$producto = $Productos->find(123);
 
$producto->nombre = "Televisor";
 
$producto->nombre = "Televisor";
 
$producto->save();  
 
$producto->save();  
</pre>
+
</source>
  
 
Otra forma de actualizar registros es utilizar el método update() de esta forma:
 
Otra forma de actualizar registros es utilizar el método update() de esta forma:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$producto = $Productos->find(456);
 
$producto = $Productos->find(456);
 
$producto->update(“nombre: Televisor”, “cantidad: 2”);
 
$producto->update(“nombre: Televisor”, “cantidad: 2”);
 
$producto->save();  
 
$producto->save();  
</pre>
+
</source>
  
 
==Borrando Registros==
 
==Borrando Registros==
Línea 160: Línea 160:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
$Productos->delete(123);
 
$Productos->delete(123);
</pre>
+
</source>
  
 
==Propiedades Soportadas==
 
==Propiedades Soportadas==

Revisión del 01:38 20 may 2009

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.

Creando Registros

Manteniendo la idea del Objeto-Relacional podemos pensar que crear registros es lo mismo que crear objetos, entonces podríamos estar en lo cierto. Asignar a un objeto valores y ejecutar el método create o save es todo lo que tenemos que hacer.

Ejemplo

$album = new Album();
$album->nombre = “Take Off Your Pants and Jacket”;
$album->valor = 40000;
$album->save();

Adicionalmente a esto puede utilizar el método ‘create’ así como los métodos como ‘createfromrequest’ para crear nuevos registros.

Ejemplo

$album = new Album();
$album->nombre = “Take Off Your Pants and Jacket”;
$album->valor = 40000;
$album->create();

$album = new Album();
$album->create(
    “nombre: Take Off Your Pants and Jacket”,
    “valor: 40000”
);
  
$album = new Album();
$album->create(array(
    “nombre” => “Take Off Your Pants and Jacket”,
    “valor” => 40000
));

También podemos crear un Nuevo registro a partir de los valores de $_REQUEST

Ejemplo

$album = new Album();
$album->create_from_request();

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
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.

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

Realmente no 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