# 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; ?> ```