Optimizacion de obtencion de datos.

This commit is contained in:
Juan Pablo Vial
2025-04-24 19:23:39 -04:00
parent d910f3eb69
commit b4ca59fb6d
5 changed files with 57 additions and 9 deletions

View File

@ -11,7 +11,9 @@ use Incoviba\Service;
class Propiedad extends Ideal\Repository
{
public function __construct(Define\Connection $connection, protected Service\Venta\PropiedadUnidad $propiedadUnidadService, protected Service\Venta\Unidad $unidadService)
public function __construct(Define\Connection $connection,
protected Service\Venta\PropiedadUnidad $propiedadUnidadService,
protected Service\Venta\Unidad $unidadService)
{
parent::__construct($connection);
$this->setTable('propiedad');
@ -71,4 +73,21 @@ class Propiedad extends Ideal\Repository
->where('`unidad_principal` = ? AND `estado` = 1');
return $this->fetchOne($query, [$unidad_id]);
}
/**
* @param int $propiedad_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchArrayById(int $propiedad_id): array
{
$query = $this->connection->getQueryBuilder()
->select()
->from($this->getTable())
->where('`id` = ?')
->limit(1);
$propiedad = $this->fetchAsArray($query, [$propiedad_id])[0];
$propiedad['unidades'] = $this->propiedadUnidadService->getArrayByPropiedad($propiedad_id);
return $propiedad;
}
}

View File

@ -104,6 +104,26 @@ class PropiedadUnidad extends Ideal\Repository
return $this->fetchMany($query, [$propiedad_id]);
}
/**
* @param int $propiedad_id
* @return array
* @throws Implement\Exception\EmptyResult
*/
public function fetchArrayByPropiedad(int $propiedad_id): array
{
$query = $this->connection->getQueryBuilder()
->select('a.id AS pu_id, a.valor, a.propiedad, unidad.*')
->from("{$this->getTable()} a")
->joined('INNER JOIN `unidad` ON a.`unidad` = `unidad`.`id`')
->where('a.`propiedad` = ?')
->group('`unidad`.`id`');
$unidades = $this->fetchAsArray($query, [$propiedad_id]);
array_walk($unidades, function(&$unidad) {
$unidad['proyecto_tipo_unidad'] = json_decode(json_encode($this->proyectoTipoUnidadService->getById($unidad['pt'])), true);
});
return $unidades;
}
/**
* @param Define\Model $model
* @return void