Clases/Objetos de Conexion Directa a tablas

De CidesaWiki

(Diferencias entre revisiones)
Saltar a navegación, buscar
(La clase Criterio)
 
Línea 165: Línea 165:
</pre>
</pre>
-
Mas información
+
Mas información en la página del symfony [[http://www.symfony-project.com/book/trunk/08-Inside-the-Model-Layer#Retrieving%20Records%20with%20Criteria]]

Última versión de 20:11 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:


Contenido

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 funciones 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, o en la ayuda de symfony en la sección del [modelo]


La clase Criterio

Esta es una clase de symfony que sirva para generar criterios de búsqueda en las tablas de la base de datos a través de las clase *Peer. Por ejemplo, digamos que queremos hacer una búsqueda por el codpro y codrec en la tabla carecpro, deberiamos proceder como sigue:


$c = new Criteria();
$c->add(CarecproPeer::CODPRO,'valor1');
$c->add(CarecproPeer::CODPRE,'valor2');

// Le pasamos en objeto criterio para que sepa que queremos traernos de esa tabla
// la variable $objetos contiene un arreglo de objetos Carecpro con todos los registros resultantes.
$objetos = CarecproPeer::doSelect($c);


Mas información en la página del symfony [[1]]

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas