En este capítulo veremos detalles sobre adición, actulazación, y eliminación de objetos desde el almacenamiento de datos.
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 save().
// Crear un nuevo autor $author = new Author(); $author->setFirstName("Leo"); $author->setLastName("Tolstoy"); $author->save(); // ahora ajustamos la llave primaria $author_id = $author->getId();
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 save() puede resultar en escribir más de un registro a la base de datos.
// 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
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:
// Crear Autor $author = new Author(); $author->setFirstName("John"); $author->setLastName("Smith"); $author->save(); . . $book = new Book(); $book->setAuthorId($author->getId()); . .
Una simple actualización de datos es completada cuando un objeto es modificado(usando los métodos set*()) y el método save() 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.
$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
Para eliminar registros usted puede llamar al método delete() del objeto o usar el método doDelete() de peer.
El método delete() 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.
$author = AuthorPeer::retrieveByPk(1); $author->delete(); // DELETE FROM author WHERE author.AUTHOR_ID = 1
Cuando usa el método doDelete() 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 author.
$crit = new Criteria(); $crit->add(AuthorPeer::AUTHOR_ID, 1); AuthorPeer::doDelete($crit); // DELETE FROM author WHERE author.AUTHOR_ID = 1
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 [eliminación en cascada].