---
# System prepended metadata

title: 'Día 4, Bienes Raíces-Poo: Consultando la Base de datos para obtener todas las propiedad'
tags: [php]

---

# Día 4, Bienes Raíces-POO: Consultando la Base de datos para obtener todas las propiedades

Vamos a cambiar el index del admin para que muestre los registros usando nuestra clase.

Lo primero es incluir el `use App\Propiedad`  y ya podemos usar los métodos del objeto. 
Luego seleccionaremos todas las propiedades, además será otro método static ya que realmente no variará en cada instancia. 

Vamos a la clase Propiedad y creamos el siguiente método: 

```
public static function all(){
    $query = "SELECT * FROM propiedades";
    $resultado= self::$db->query($query);
    debuguear($resultado->fetch_assoc());

}
```

Lo llamamos desde el  index del admin: 
`$propiedades=Propiedad::all();`

Veremos que nos da el resultado pero en forma de vector asociativo, en active record necesitamos tener un objeto. 
Cómo lo hacemos?
```
public static function all() {
        $query = "SELECT * FROM propiedades";
        $resultado=self::consultarSQL($query);
        return $resultado; 
    }
        
 public static function consultarSQL($query){
        //Consultar la base de datos
        $resultado=self::$db->query($query);
     

        //iterar los resultados
        $array=[];
        while ($registro=$resultado->fetch_assoc()){
            $array[]=self::crearObjeto($registro);

        }
       debuguear($array);
        //liberar la memoria

        //devolver resultados
    }
    protected static function crearObjeto($registro){
            $objeto=new self;
            
            foreach ($registro as $key =>$value){
        
                if (property_exists($objeto,$key)){
                    $objeto->$key=$value;

                }
            }
            return $objeto;
    }
```
Ves que hemos colocado un debuguear a la salida del while de consultarSQL, nos va a devolver un array de objetos, tal y como sigue:
```
array(5) {
  [0]=>
  object(App\Propiedad)#5 (10) {
    ["id"]=>
    string(2) "17"
    ["titulo"]=>
    string(35) "Para cirujanos plásticos sin moral"
    ["precio"]=>
    string(11) "20000000.00"
    ["imagen"]=>
    string(36) "4b5292359d21238e519f126b1ae631ae.jpg"
    ["descripcion"]=>
    string(226) "Con espacio para montar tu clínica ilegal y que tus clientes puedan decir que volvieron más bellas y con menos nariz después de sus vacaciones de un mes en las Maldivas. Todo bien pensado para que sea un lucrativo negocio. "
    ["habitaciones"]=>
    string(2) "15"
    ["wc"]=>
    string(2) "15"
    ["estacionamiento"]=>
    string(1) "7"
    ["creado"]=>
    string(10) "2023-10-13"
    ["vendedores_id"]=>
    string(1) "1"
  }
  [1]=>
  object(App\Propiedad)#6 (10) {
    ["id"]=>
    string(2) "18"
    ["titulo"]=>
    string(15) "nueva propiedad"
    ["precio"]=>
    string(7) "3333.00"
    ["imagen"]=>
    string(10) "imagen.jpg"
    ["descripcion"]=>
    string(90) "nueva propiedadnueva propiedadnueva propiedadnueva propiedadnueva propiedadnueva propiedad"
    ["habitaciones"]=>
    string(1) "1"
    ["wc"]=>
    string(1) "1"
    ["estacionamiento"]=>
    string(1) "1"
    ["creado"]=>
    string(10) "2023-11-28"
    ["vendedores_id"]=>
    string(1) "1"
  }
  [2]=>
  object(App\Propiedad)#7 (10) {
    ["id"]=>
    string(2) "20"
    ["titulo"]=>
    string(17) "nueva propiedad's"
    ["precio"]=>
    string(7) "3333.00"
    ["imagen"]=>
    string(36) "f35adbecdf52e808f902ccf0570bbe22.jpg"
    ["descripcion"]=>
    string(119) "nueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad's"
    ["habitaciones"]=>
    string(1) "1"
    ["wc"]=>
    string(1) "1"
    ["estacionamiento"]=>
    string(1) "1"
    ["creado"]=>
    string(10) "2023-11-30"
    ["vendedores_id"]=>
    string(1) "1"
  }
  [3]=>
  object(App\Propiedad)#8 (10) {
    ["id"]=>
    string(2) "21"
    ["titulo"]=>
    string(17) "nueva propiedad's"
    ["precio"]=>
    string(8) "33333.00"
    ["imagen"]=>
    string(36) "be9987cf485d3c9a62a221798f5bffe9.jpg"
    ["descripcion"]=>
    string(102) "nueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad'snueva propiedad's"
    ["habitaciones"]=>
    string(1) "1"
    ["wc"]=>
    string(1) "2"
    ["estacionamiento"]=>
    string(1) "1"
    ["creado"]=>
    string(10) "2023-12-01"
    ["vendedores_id"]=>
    string(1) "1"
  }
```

Investiga las instrucciones que no sabes y explica en clase cómo se ha conseguido?

En el consularSQL ves que estamos creadon un objeto por cada propiedad en la base de datos, tenemos que liberar la memoria y retornar los resultados para poder mostrarlos: 

Si ejecutas ahora mismo el index dará el siguiente erorr:
![image](https://hackmd.io/_uploads/BJ7k8jUHa.png)

Porque en el index el código para mostrar está esperando un vector asociativo y ahora mismo lo que tenemos es un vector de objetos así que en el index.php lo cambiamos para manejo de objetos: 

```
<?php foreach ($propiedades as $propiedad):?>
<tr>
    <td><?php echo $propiedad->id; ?></td>
    <td><?php echo $propiedad->titulo; ?></td>
    <td>
        <img src="/imagenes/<?php echo $propiedad->imagen; ?>" width="100" class="imagen-tabla">
    </td>
    <td>$ <?php echo $propiedad->precio; ?></td>
    <td>
    <form method="POST">
        <input type="hidden" name="id_eliminar" value="<?php echo $propiedad->id; ?>">
        <input type="submit" href="/admin/propiedades/borrar.php" class="boton boton-rojo" value="Borrar">
    </form>

        <a href="/admin/propiedades/actualizar.php?id=<?php echo $propiedad->id; ?>" class="boton boton-verde">Actualizar</a>
    </td>
</tr>

<?php endforeach; ?>
```
