Diferencia entre revisiones de «CRUD»

De KumbiaPHP Framework Wiki
(Página creada con '=Create (Crear), Read (Leer), Update (Actualizar), Delete (Borrar)= ActiveRecord implementa automáticamente las cuatro operaciones básicas sobre una tabla: Crear, Leer, A...')
 
m (Revertidos los cambios de 80.31.149.109 (disc.) a la última edición de 190.245.94.241)
 
(No se muestran 12 ediciones intermedias de 10 usuarios)
Línea 3: Línea 3:
 
[[ActiveRecord]] implementa automáticamente las cuatro operaciones básicas sobre una tabla: Crear, Leer, Actualizar y Borrar.
 
[[ActiveRecord]] implementa automáticamente las cuatro operaciones básicas sobre una tabla: Crear, Leer, Actualizar y Borrar.
  
==Creando Registros==
+
''[[==Consultando 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
 
<pre>
 
$Album = new Album();
 
$Album->nombre = “Take Off Your Pants and Jacket”;
 
$Album->valor = 40000;
 
$Album->save();
 
</pre>
 
 
 
Adicionalmente a esto puede utilizar el método ‘create’ así como los métodos como ‘createfromrequest’ para crear nuevos registros.
 
 
 
Ejemplo
 
<pre>
 
$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
 
));
 
</pre>
 
 
 
También podemos crear un Nuevo registro a partir de los valores de $_REQUEST
 
 
 
Ejemplo
 
<pre>
 
$Album = new Album();
 
$Album->create_from_request();
 
</pre>
 
 
 
==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.
 
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.
Línea 52: Línea 10:
  
 
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<15000” )
 
print $producto->nombre;
 
print $producto->nombre;
 
}
 
}
Línea 77: Línea 35:
 
     “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 48:
  
 
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(“conditions: estado=’$estado’”,
 
   “order: fecha Desc, valor”,
 
   “order: fecha Desc, valor”,
 
   “limit: 30”) as $prod){
 
   “limit: 30”) as $prod){
 
       print $prod->nombre;
 
       print $prod->nombre;
 
   }
 
   }
</pre>
+
</source>
  
 
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(“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==
Línea 107: Línea 74:
  
 
Ejemplo
 
Ejemplo
<pre>
+
<source lang=php>
 
#Cuantos productos hay?
 
#Cuantos productos hay?
 
print Productos->count();
 
print Productos->count();
Línea 113: Línea 80:
 
#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 100:
 
#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==
  
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.
+
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á un registro nuevo.
  
 
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==
  
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().
+
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
 
Ejemplo
<pre>
+
<source lang=php>
 
$Productos->delete(123);
 
$Productos->delete(123);
</pre>
+
</source>
  
 
==Propiedades Soportadas==
 
==Propiedades Soportadas==

Revisión actual del 16:00 16 abr 2020

Create (Crear), Read (Leer), Update (Actualizar), Delete (Borrar)[editar]

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[editar]

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(“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(“conditions: estado=’$estado’and rownum <= 30”,
   “order: fecha Desc, valor”) as $prod){
       print $prod->nombre;
   }

Promedio, Contando, Sumando, Mínimo y Máximo[editar]

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[editar]

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á 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[editar]

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[editar]

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