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.

La paginación de búsqueda de Codeigniter 4 no está contando y devuelve la página.

Estoy trabajando en un proyecto de búsqueda simple en el que retorno los resultados. La función de búsqueda parece funcionar, sin embargo, el campo de total y página devuelven valores incorrectos. El campo total devuelve el número total de filas dentro de los datos, no el número total de resultados de la búsqueda y la página siempre es {}.

Aquí está el modelo->función que he creado:

public function search($string)
{

$results = $this->select('*')->orLike('title', $string)->orLike('excerpt', $string);

if ( empty( $results ) )
{
    return [];

} else 
{
    $data = [
        'results' => $results->paginate(2),
        'total'   => $results->countAllResults(),
        'page'    => $this->pager,

    ];

    return $data;

}

}

Lo que es desconcertante es que si coloco el campo total antes del valor de los resultados, el conteo funciona, pero luego el campo de resultados devuelve todo en la base de datos en paginate(2).

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la función de búsqueda es que el campo total devuelve el número total de filas en los datos en lugar del número total de resultados de la búsqueda. Además, la página siempre devuelve {}.

    Para solucionar este problema, puedes modificar el código contando los resultados de búsqueda antes de la paginación. Puedes actualizar el código de la siguiente manera:

    public function search($string)
    {
    
        $results = $this->select('*')->orLike('title', $string)->orLike('excerpt', $string);
    
        if ( empty( $results ) )
        {
            return [];
    
        } else 
        {
            $total = $results->countAllResults(); // contar el total de resultados de búsqueda
            $data = [
                'results' => $results->paginate(2),
                'total'   => $total,
                'page'    => $this->pager->getCurrentPage(), // obtener la página actual usando el paginador
            ];
    
            return $data;
    
        }
    }
    

    Este código agrega una nueva variable $total que cuenta el total de resultados de búsqueda. Luego, $results se paginan después de contar los resultados de búsqueda. Además, se utiliza la función getCurrentPage() para obtener la página actual usando $this->pager.

    Con estos cambios, la función de búsqueda ahora debería devolver correctamente el número total de resultados de búsqueda y la página actual.

Comments are closed.