es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CakePHP 4 – Cómo encontrar los valores máximos y mínimos de una tabla relacionada

Estoy desarrollando en CakePHP 4 y aún soy bastante nuevo en esto, así que esto podría ser sencillo.

Tengo una tabla de desarrollos de viviendas con una estructura simple:

development_id, nombre, dirección, etc.

Cada desarrollo tiene una serie de parcelas en venta que están en una tabla separada con una estructura como ésta:

plot_id, development_id, precio.

En DevelopmentsTable.php se relacionan de la siguiente manera:

$this->hasMany('Plots', [
   'foreignKey' => 'development_id',
]);

Para cada desarrollo necesito mostrar cuál es el precio máximo y mínimo de las parcelas que contiene. No estoy seguro de cómo hacerlo más que recorriendo todas las parcelas en la vista y encontrando el máximo y el mínimo, lo cual no parece muy bueno.

Cualquier sugerencia sobre una mejor manera de hacerlo sería útil.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los precios máximos y mínimos de las parcelas de cada desarrollo, puedes utilizar las funciones de agregación proporcionadas por CakePHP’s Query Builder. Específicamente, puedes utilizar las funciones max() y min() para obtener los precios máximos y mínimos respectivamente.

    En el archivo DevelopmentsTable.php, puedes definir un método de búsqueda personalizado que recupere los precios máximos y mínimos de cada desarrollo. Aquí tienes un ejemplo de implementación:

    public function findMinMaxPrices(Query $query, array $options)
    {
        return $query->find()
            ->select(['development_id', 'max_price' => $query->func()->max('Plots.price'), 'min_price' => $query->func()->min('Plots.price')])
            ->leftJoinWith('Plots')
            ->group('Developments.development_id');
    }
    

    Este método de búsqueda une la tabla de parcelas con la tabla de desarrollos y agrupa los resultados por development_id. La cláusula select recupera el development_id, el precio máximo y el precio mínimo utilizando las funciones de agregación max() y min(), respectivamente.

    En la vista, puedes llamar a este método de búsqueda para recuperar los datos y mostrarlos según sea necesario. Por ejemplo:

    // En tu controlador:
    $developments = $this->Developments->find('minMaxPrices')->toArray();
    $this->set(compact('developments'));
    
    // En la vista:
    <table>
        <tr>
            <th>Nombre del Desarrollo</th>
            <th>Precio Mínimo</th>
            <th>Precio Máximo</th>
        </tr>
        <?php foreach ($developments as $development): ?>
            <tr>
                <td><?= h($development->name) ?></td>
                <td><?= $development->min_price ?></td>
                <td><?= $development->max_price ?></td>
            </tr>
        <?php endforeach; ?>
    </table>
    

    Este código recupera los precios máximo y mínimo de cada desarrollo utilizando el método de búsqueda personalizado y los muestra en una tabla. Ten en cuenta que deberás ajustar las columnas de la tabla según sea necesario para tu caso de uso específico.

Comments are closed.