---
# System prepended metadata

title: 'Día 6, hacemos el visualizar con active record'
tags: [php]

---

## Día 6, hacemos el visualizar con Active Records

Si recordamos en templates teníamos el script de anuncios que eral tal que así:
![image](https://hackmd.io/_uploads/BJed6NKUa.png)

A estas alturas vel este código así debería sentarte mal, podemos hacerlo mejor.

el templates/anuncios.php va a quedar limpísimo: 

```
<?php 
    use App\Propiedad;
    $propiedades=Propiedad::all();
?>

<div class="contenedor-anuncios">
<?php foreach($propiedades as $propiedad){ ?>
        <div class="anuncio">
            <img src="/imagenes/<?php echo $propiedad->imagen; ?>" alt="Anuncio casa en el lago">
            <div class="contenido-anuncio">
                <h3><?php echo $propiedad->titulo; ?></h3>
                <p><?php echo $propiedad->descripcion; ?></p>
                <p class="precio">$ <?php echo $propiedad->precio; ?></p>

                <ul class="iconos-caracteristicas">
                    <li>
                        <img src="/build/img/icono_wc.svg" alt="icono wc">
                        <p><?php echo $propiedad->wc; ?></p>
                    </li>
                    <li>
                        <img src="/build/img/icono_estacionamiento.svg" alt="icono autos">
                        <p><?php echo $propiedad->estacionamiento; ?></p>
                    </li>
                    <li>
                        <img src="/build/img/icono_dormitorio.svg" alt="icono habitaciones">
                        <p><?php echo $propiedad->habitaciones; ?></p>
                    </li>
                </ul>


                <a href="anuncio.php?id=<?php echo $propiedad->id; ?>" class="boton boton-amarillo d-block">Ver Propiedad</a>
            </div>
        </div>

<?php }  ?>
    </div>



```

Voy ahora a anuncio.php para también cambiarlo al modelo orientado a objetos, como ven esto ya se vuelve repetitivo.

Reemplazamos todo este código:
```
// Consultar la propiedad

$db = conectarDb();
$consulta = "SELECT * FROM propiedades WHERE id = ${id}";
// echo $consulta;
$resultado = mysqli_query($db, $consulta);
$propiedad = mysqli_fetch_assoc($resultado);


```

Y sustituimos todo lo que estaba en vectores por el nuevo formato en objetos:

```
<?php
require 'includes/app.php';
use App\Propiedad;

$id =  $_GET['id'];
$id = filter_var($id, FILTER_VALIDATE_INT);
if(!$id) {
    header('Location: /');
}

// Consultar la propiedad
$propiedad= Propiedad::find($id);

// Incluir template

incluirTemplate('header');
?>

<h1 class="fw-300 centrar-texto"><?php echo $propiedad->titulo; ?></h1>
<img src="/imagenes/<?php echo $propiedad->imag; ?>" alt="Imagen Anuncio">

<main class="contenedor seccion contenido-centrado">
    <div class="resumen-propiedad">
        <p class="precio">$<?php echo $propiedad->precio; ?></p>
        <ul class="iconos-caracteristicas">
            <li>
                <img src="/build/img/icono_wc.svg" alt="icono wc">
                <p><?php echo $propiedad->wc; ?></p>
            </li>
            <li>
                <img src="/build/img/icono_estacionamiento.svg" alt="icono autos">
                <p><?php echo $propiedad->estacionamiento; ?></p>
            </li>
            <li>
                <img src="/build/img/icono_dormitorio.svg" alt="icono habitaciones">
                <p><?php echo $propiedad->habitaciones; ?></p>
            </li>
        </ul>
    </div>
    <!--.resumen-propiedad-->

    <p><?php echo $propiedad->descripcion; ?></p>
</main>

<?php
incluirTemplate('footer');
?>
```

No va a funcionar porque no tengo el método find por id, date cuenta de que si no tuviera active record y quisiera hacer un recuperar por id en vendedores/usuarios/whatever tendría que hacerlo en cada clase, aquí con hacer el find en el active class tendremos. 

Incluimos este nuevo método en active class, inmediatamente todas las clases que heredan lo tendrán disponible: 


```
 // Busca un registro por su id
    public static function find($id) {
        $query = "SELECT * FROM " . static::$tabla  ." WHERE id = ${id}";

        $resultado = self::consultarSQL($query);

        return array_shift( $resultado ) ;
    }
```