Clases/Objetos de Conexion Directa a tablas

De CidesaWiki

(Diferencias entre revisiones)
Saltar a navegación, buscar
(Funcionamiento de las clases generadas por Propel)
Línea 94: Línea 94:
</pre>
</pre>
-
* '''Función "save"''': esta función del objeto guarda las datos contenidos en los campos en al base de datos. Hay que tomar en cuenta que no hay diferencia para usuario entre actualziar e insertar un registro nueov. Por ejemplo si creo un nuevo objeto de la clase
+
* '''Función "save"''': esta función del objeto guarda las datos contenidos en los campos en al base de datos. Hay que tomar en cuenta que no hay diferencia para usuario entre actualizar e insertar un registro nuevo. Por ejemplo:
 +
 
 +
<pre>
 +
 
 +
// Creo un objeto nuevo, sin datos
 +
$objeto = new Carecpro();
 +
 
 +
// Le inserto datos a este objeto
 +
$objeto->setCodpro('codigo');
 +
$objeto->setCodrec('codigo');
 +
 
 +
// Guardo la información
 +
$objeto->save();
 +
 
 +
</pre>
 +
 
 +
Al ejecutar la función "save", el objeto identifica autamicamente que es un registro nuevo y realiza el sql necesario.
 +
 
 +
Por otro lado si..
 +
 
 +
<pre>
 +
 
 +
// Esta funcion estática es una herramienta de busqueda de registros
 +
// en este caso se esta pidiendo que traiga la informacion del registro con clave primaria "1"
 +
// Esta información será devuelta en un objeto de la clase Carecpro
 +
$objeto = CarecproPeer::retrieveByPK('1');
 +
 
 +
// Modifico los datos de los registos
 +
$objeto->setCodpro('codigo');
 +
$objeto->setCodrec('codigo');
 +
 
 +
// Guardo la información
 +
$objeto->save();
 +
 
 +
<pre>
 +
 
 +
En este ultimo ejemplo el objeto determina que el registro ya existe y que solo debe realizar un update de los campos modificados (no de todos).
 +
 
 +
Por ultimo si queremos eliminar un registro:
 +
 
 +
<pre>
 +
 
 +
$objeto->delete();
 +
 
 +
</pre>
 +
 
 +
Por supuesto esta ultima funcion necesita que el objeto contenga un registro válido de la tabla.
 +
 
 +
* '''Funciones doSelect''': la clase *Peer contiene funciones de búsqueda como el doSelect y doSelectOne, con los cuales podemos hacer busquedas dentro de las tablas. La diferencia entre doSelect y doSelectOne es que la primera devuelve todos los registro que concuerden con el criterio y la segunda solo el primer registro.
 +
 
 +
Por ultimo si desea conocer mas fucniones de las clases de objetos y Peer puede verificar las clases bases de cada uno, la cuales contienen todo el código fuente y por ende las definiciones de las funciones.

Revisión de 20:00 30 abr 2007

Symfony contiene una herramienta que agiliza la comunicación con la base de datos; esta es llamada [Propel], la misma genera clases en distintos lenguajes para manejar las diferentes tablas de la base de dados, en esta artículo analziaremos como trabaja y como nos puede ayudar:


Configurando/Ejecución Propel

Propel dentro de symfony trabaja con la información que contiene el archivo schema.yml, en el cual se coloca la información o estrucura de las tablas de la base de datos que queremos generar. El archivo schema.yml contiene información como la siguiente:

---
propel:
  _attributes: { noXsd: false, defaultIdMethod: none, package: lib.model }
  carecpro: 
    codpro: 
      type: VARCHAR
      size: 10
      required: true
    codrec: 
      type: VARCHAR
      size: 10
      required: true
    fecent: 
      type: DATE
    fecven: 
      type: DATE
    id: 
      type: INTEGER
      required: true
      autoIncrement: true

La estrucura del archivo .yml es llamada [YAML], y es la forma como el propel de symfony obtiene los parámetros de ejecución y generación de las clases. En el ejemplo anterior se definió una tabla llamada carecpro, que contiene los campos codpro, codrec, fecent, fecven y id, el cual le dirá a propel como crear la clase de comunicación con la tabla.

Luego de tener debidamente configurado el archivo .yml, se procede hacer el llamado de la función propel de symfony por consola:

NOTA: debes estar en el directorio raiz del proyecto.

# symfony propel-build-model

Esta función te indicará el nombre de la clase resultante y los archivos que fueron creado.


Clases y Archivos Generados

Luego de ejecutar la herramienta Propel, la misma genera los siguientes archivos/clases:


--lib
----model
------map (carpeta)
--------CarecproMapBuilder.php
------om (carpeta)
--------BaseCarecpro.php
--------BaseCarecproPeer.php
------Carecpro.php
------CarecproPeer.php

En conclusión la clases BaseCarecproPeer.php y BaseCarecpro.php son las que debe ser usadas y modificadas por el usuario, las demás son generadas por Propel y contiene el núcleo del código de conexión.


Funcionamiento de las clases generadas por Propel

Todas las clases generadas por propel funcionan de la siguiente forma:


$codpro = Objeto->getCodpro();


Objeto->setCodpro('valor');


// Creo un objeto nuevo, sin datos
$objeto = new Carecpro();

// Le inserto datos a este objeto
$objeto->setCodpro('codigo');
$objeto->setCodrec('codigo');

// Guardo la información
$objeto->save();

Al ejecutar la función "save", el objeto identifica autamicamente que es un registro nuevo y realiza el sql necesario.

Por otro lado si..


// Esta funcion estática es una herramienta de busqueda de registros
// en este caso se esta pidiendo que traiga la informacion del registro con clave primaria "1"
// Esta información será devuelta en un objeto de la clase Carecpro
$objeto = CarecproPeer::retrieveByPK('1');

// Modifico los datos de los registos
$objeto->setCodpro('codigo');
$objeto->setCodrec('codigo');

// Guardo la información
$objeto->save();

<pre>

En este ultimo ejemplo el objeto determina que el registro ya existe y que solo debe realizar un update de los campos modificados (no de todos).

Por ultimo si queremos eliminar un registro:

<pre>

$objeto->delete();

Por supuesto esta ultima funcion necesita que el objeto contenga un registro válido de la tabla.

Por ultimo si desea conocer mas fucniones de las clases de objetos y Peer puede verificar las clases bases de cada uno, la cuales contienen todo el código fuente y por ende las definiciones de las funciones.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas