<!-- -File $Id: ManipulatingObjects.html,v 1.1 2004/07/08 01:17:06 hlellelid Exp $ -License GNU FDL (http://www.gnu.org/copyleft/fdl.html) -Copyright 2003, Propel project -Author Hans Lellelid, hide@address.com --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Propel Guide</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> <link rel="Stylesheet" rev="Stylesheet" href="../css/Documentation.css" type="text/css" charset="iso-8859-1"/> </head> <body> <h1>Objetos persistentes</h1> <p>En este capítulo veremos detalles sobre adición, actulazación, y eliminación de objetos desde el almacenamiento de datos.</p> <h2><a name="ManipulatingObjects.Inserting"></a>Adicionando Objetos</h2> <h3>Inserción simple</h3> <p>Adicionar objetos a su almacenamiento de datos es en efecto insertar filas destro de su tabla. Esto es fácilmente hecho por Propel, simplemente hay que crear un nueva instancia de la clase aporiada e invocarn el método <strong>save()</strong>.</p> <pre title="retrieveByPk() simple key">// Crear un nuevo autor $author = new Author(); $author->setFirstName("Leo"); $author->setLastName("Tolstoy"); $author->save(); // ahora ajustamos la llave primaria $author_id = $author->getId();</pre> <h3>Inserción en "cascada" </h3> <p>En ejemplo anterior una simple columna fué insertada en la base de datos. En muchos casos, o como sea, usted necesitará trabajar con registros inter-relacionados, y un simple llamado al método <strong>save()</strong> puede resultar en escribir más de un registro a la base de datos.</p> <pre title="retrieveByPk() simple key"> // Crear autor $author = new Author(); $author->setFirstName("John"); $author->setLastName("Smith"); // Crear publisista $publisher = new Publisher(); $publisher->setName("Penguin"); // Crear el libro de J.Smith $book = new Book(); $book->setISBN("111-2222-3333"); $book->setTitle("Fake Title"); $book->setPublisher($publisher); $book->setAuthor($author); // guardar el libro (book) hará que se almacenen también // los registros autor y publisista $book->save(); // adicionará 3 registros a la base de datos</pre> <p>Esa es la forma más fácil de adicionar objetos y tenerlos automáticamente cuando el item relacionado es guardado. Usted puede también manualmente especificar las llaves foraneass, lo que significa que necesitaró adicionar unas cuantas líneas más de código:</p> <pre title="INSERT: manual fkey setting"> // Crear Autor $author = new Author(); $author->setFirstName("John"); $author->setLastName("Smith"); $author->save(); . . $book = new Book(); $book->setAuthorId($author->getId()); . .</pre> <h2><a name="ManipulatingObjects.Updating"></a>Actualizando Objetos</h2> <p>Una simple actualización de datos es completada cuando un objeto es modificado(usando los métodos set*()) y el método <strong>save()</strong> es invocado. En su código esto luce igual al código para insertar un nuevo registro la única diferencia es que el objeto a modificar posee una llave primaria asignada previamente.</p> <pre title="Criteria: simple"> $obj = AuthorPeer::retrieveByPK(1); // get Author where pkey is 1 $obj->setFirstName($obj->getFirstName() . "-modiified"); $obj->save(); // performs UPDATE // UPDATE Author // SET author.FIRST_NAME = '".$obj->getFirstName()."-modified' // WHERE author.AUTHOR_ID = 1 </pre> <h2><a name="ManipulatingObjects.Deleting"></a>Eliminando Objetos</h2> <p>Para eliminar registros usted puede llamar al método <strong>delete()</strong> del objeto o usar el método <strong>doDelete()</strong> de peer. </p> <p>El método <strong>delete()</strong> elimina el objeto de la base de datos (por llave primaria). Tmbién ajusta el estado del objeto a "aliminado". Usted puede todavia recuperar las propiedades de objetos eliminados, pero no puede guardar objetos eliminados.</p> <pre title="Using Object->delete()">$author = AuthorPeer::retrieveByPk(1); $author->delete(); // DELETE FROM author WHERE author.AUTHOR_ID = 1</pre> <p>Cuando usa el método <strong>doDelete()</strong> de peer, usted puede especificar cualquier criterio que desee cuando el rendimiento es eliminado; en este ejemplo hemos eliminado un simple registro de la tabla <em>author</em>.</p> <pre title="Using Peer::doDelete()">$crit = new Criteria(); $crit->add(AuthorPeer::AUTHOR_ID, 1); AuthorPeer::doDelete($crit); // DELETE FROM author WHERE author.AUTHOR_ID = 1</pre> <p>Propel incluso soporta eliminación en cascada (incluyendo emulación para bases de datos que no lo soportan nativamente), el cual es descrito con más detalle en el capitulo de relaciones [<a href="Relationships.html#Relationships.CascadingDelete">eliminación en cascada</a>].</p> <p> </p> </body> </html>