Dolibarr. Php. Ejecutar una query y mostrar los resultados

Submitted by tech4life on

Cuando desarrollamos nuestros propios módulos para Dolibarr, o queremos modificar directamente el core de Dolibarr es muy interesante saber como ejecutar consultas a base de datos y como recorrer los resultados obtenidos para mostrarlos por pantalla.

Vamos a por ello. 

Primero de todo lo que tenemos que ver es que tengamos cargado el objeto $db.

Si no lo tenemos cargado lo podemos incluir simplemente haciendo 

global $db;

Esto nos cargará la clase que utiliza Dolibarr para gestionar las consultas a base de datos.

El siguiente paso será crear nuestra consulta, a modo de ejemplo :

$sql = 'SELECT ';
$sql .= ' s.rowid , s.nom as societe_name ';
$sql .= ' FROM  '.MAIN_DB_PREFIX.'societe as s  ';
$sql .= ' WHERE 1 = 1';

Esta consulta devolverá todos los registros de la tabla "societe". Aquí queremos hacer notar que a la hora de poner las tablas, hemos añadido una constante que es "MAIN_DB_PREFIX". En esta constante está el prefijo de tablas que hemos indicado al crear nuestra instancia de Dolibarr. Normalmente suele ser "llx_" pero es muy buena práctica utilizar esta constante y no el nombre entero que podemos ver en nuestro gestor de mysql, ya que si quisiéramos reutilizar nuestro código en otra instancia, este prefijo podría cambiar.

Una vez tenemos nuestra consulta, con sus posibles joins y sus filtros en el Where, debemos ejecutar la consulta, para ello haremos : 

$resql = $db->query($sql);

Una vez ejecutada nuestra consulta, el siguiente paso será comprobar que ha funcionado correctamente, ver cuantos registros tenemos, ir recorriendo el cursor que se ha generado con todos los registro e imprimirlos por pantalla. 

Vamos a ver el código y luego lo explicamos:

if ($resql) {
    $num = $db->num_rows($resql);
    $i = 0;
    print '<div class="div-table-responsive-no-min">'; 
    print '<table class="liste centpercent">';
    print '<tr class="liste_titre">';
    print_liste_field_titre("Societe");
    print "</tr>\n";
    while ($i < $num) {
        $obj = $db->fetch_object($resql);
        print '<tr class="oddeven">';
        print '<td>'.$obj->societe_name.'</td>';
        print '</tr>';
        $i++;
    }
}

Primero de todo comprobamos que el resultado de la query es correcto y luego obtenemos el número de registros que nos ha devuelto la consulta mediante la función "num_rows".

En este caso para imprimir los resultados hemos creado una tabla y la imprimimos por pantalla con la función "print".

Para recorrer todos los elementos creamos un bucle "while" que se irá ejecutando mientras nuestra variable de control "i" sea más pequeña que el valor de los registros obtenidos en la consulta. 

A cada paso del bucle recuperaremos los datos haciendo un "fetch_object" que nos devolverá un objeto con tantos campos como tuviera nuestra consulta en el Select. En este caso solo rowid y societe_name.

Imprimiremos por pantalla de nuevo con "print" los datos de cada fila y muy importante, actualizaremos nuestra variable de control "i", si no nuestro bucle se ejecutaría eternamente hasta que se cancelara el script en el servidor.

Esperamos que os haya sido de utilidad si estáis empezando a programar para Dolibarr. Aunque la manera de solucionar este problema es bastante generica y se puede utilizar para cualquier otro entorno en PHP, simplemente sabiendo las funciones para ejecutar la consulta, y obtener los datos del cursor. 

 

Lenguaje
Nivel