Los creadores de esta herramienta crearon suficientes funciones para cubrir todas las necesidades de un sistema, phpDataMapper es reciente y todavía esta en desarrollo, pero va por buen camino.
Pueden visitar su pagina y guía oficial phpDataMapper.
$lista_registros=$persona->select()->from('persona')->where(array('id' => '3'));
Podriamos hacerlo así:
$lista_registros=$persona->query('SELECT * FROM persona WHERE id=3');
Más sencillo:
$lista_registros = $persona->all(array('id' => 3));
Seleccionamos la persona con el id 3.
En caso de que una tabla tenga relacion con otra por una clave foranea podemos hacer algo muy sencillo:
En caso de que persona tenga relación con publicación:
Ejemplo:
Archivo: Persona.php
<?php
class Persona extends phpDataMapper_Base {//inicio de la clase de mapeo
// definir la fuente de datos (tabla para el adaptador)
protected $_datasource = "persona";
// definir los atributos como propiedades de la clase con visibilidad publica
public $id = array ('type' => 'int', 'primary' => true, 'serial' => true );
public $nombre = array ('type' => 'string', 'required' => true );
public $email = array ('type' => 'string', 'required' => true );
public $web = array ('type' => 'string' );
public $publicaciones = array(
'type' => 'relation',
'relation' => 'HasMany',
'mapper' => 'Publicacion',
'where' => array('personaid' => 'entity.id')
);
}//fin de la clase de mapeo
?>
No es necesario modificar la tabla persona en la base de datos, $publicaciones hará las veces de una función.
El 'mapper' como sabemos, será la clase mapeo la cual vamos a usar para ese atributo en este caso Publicacion de tipo 'relation' donde personaid de la publicación sea igual al id de la persona: 'where' => array('personaid' => 'entity.id')
Archivo: Publicacion.php
Para crear este mapeo debemos crear en la base de datos: tabla publicacion, atributos: id int, nombre varchar, personaid int.
<?php
class Publicacion extends phpDataMapper_Base {//inicio del mapeo
protected $_datasource = "publicacion";
// definir los atributos como propiedades de la clase con visibilidad publica
public $id = array ('type' => 'int', 'primary' => true, 'serial' => true );
public $nombre = array ('type' => 'string', 'required' => true );
public $personaid = array('type' => 'int', 'key' => true, 'required' => true);
}//fin del mapeo
?>
Para definir una clave foranea: array('type' => 'int', 'key' => true, 'required' => true);
Archivo: index.php
<?php
include 'Conexion.php';
include 'Persona.php';
include 'Publicacion.php';
$persona = new Persona(Conexion::getConexion());
$lista_registros = $persona->all();
foreach ( $lista_registros as $registro ) {
echo 'Id: '.$registro->id.'<br/>';
echo ' Nombre: '.$registro->nombre.'<br/>';
echo ' Email: '.$registro->email.'<br/>';
echo ' Web: '.$registro->web.'<br/>';
echo '<br/>';
//Para mostrar todas las publicaciones
foreach($registro->publicaciones as $publicacion) {
echo "<p> ID: ".$publicacion->id.' Nombre: '. $publicacion->nombre. "</p>";
}
}
?>
Ejemplo de una salida:
Id: 2
Nombre: Alguien
Email: alguien@alguienweb.com
Web: www.alguienweb.com
ID: 3 Nombre: primera publicacion
ID: 4 Nombre: segunda publicacion
El alcance de este patrón de diseño se nota en las relaciones de las tablas, en el ejemplo anterior pudimos mostrar rápidamente los registros de publicaciones asociados a persona.
Otros frameworks también usan el Mapeo, yo recomiendo esta herramienta, ya que no se necesita depender de un frameworks para usarla, simplemente lo copiamos y empezamos a usarlo con nuestra aplicación, sin necesidad de modificar mucho nuestro código.
Postear en Twitter
Postear en Facebook
Feed RSS
Agregar a Favoritos
Diego Escares el 28 de Julio del 2010:
0
No me he hecho el tiempo para revisar, tengo pendientes la gran mayoría de tus publicaciones :<
php, mapeo, registros, persona, where, array, id, tabla, publicacion, archivo, necesario, modificar, base, datos, publicaciones, hara, veces, funcion, personaid, crear, int, nombre, true, index
¡Amigo! te demorarás 10 segundos en crear tu cuenta.
Disfrutarás de todos los beneficios de DocumentoWeb.