PHP » Tutorial » Diseño Mapeo Objeto-Relacional Unidad V

Otras Caracteristicas

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.

Consultas Personalizadas

$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.

Relaciones

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 '&nbsp;&nbsp;Nombre: '.$registro->nombre.'<br/>';
    echo '&nbsp;&nbsp;Email: '.$registro->email.'<br/>';
    echo '&nbsp;&nbsp;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.

sauljp07

Publicado hace 1 mes por sauljp07

167 visitas y 2 mensajes

Mensajes

Null Null hace 1 mes: 0

No me he hecho el tiempo para revisar, tengo pendientes la gran mayoría de tus publicaciones :<

¡Amigo! te demorarás 10 segundos en crear tu cuenta.

Disfrutarás de todos los beneficios de DocumentoWeb.

Tome su sitio Web

Twitter Twitter Facebook Facebook Feed RSS Feed RSS

www.DocumentoWeb.com Licencia Creative Commons