Muchas veces necesitaremos trabajar con los datos de la base de datos que tenemos en la página web. ¿Cómo lo haremos?
Para empezar, debemos tener en cuenta que prestashop tiene sus propias funciones para ejecutar consultas en Bases de Datos. Tiene las funciones de seleccionar (executeS y getRow), actualizar (update), insertar (insert) y eliminar (delete) y ejecutar SQL directamente (execute). Aquí las conocerás:Db::getInstance()->executeS()
El executeS() ejecuta un SELECT. Es la función más simple que tiene el Db de prestashop. Un ejemplo seríaSi queremos seleccionar todo de la tabla ps_product, sería así:
Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'product');
Como verás no he puesto ps_product, sino ‘._DB_PREFIX_.’product. De esta manera Prestashop pone automáticamente el prefijo a la tabla. Muy recomendable utilizarlo por si en un futuro se cambia el prefijo de las tablas.
Db::getInstance()->getRow()
La función getRow() de prestashop sirve para hacer un select pero sólo se cogerá la primera línea. Es decir, le pone automáticamente un LIMIT 1 al final de la función.Si usamos el mismo caso que el anterior sería así:
Db::getInstance()->getRow('SELECT * FROM '._DB_PREFIX_.'product');
A diferencia del anterior, en este caso sólo nos cogería el primer producto. Esto es muy util para coger datos indicando cuál es el id. De esta manera:
$id_product = 1; // Le pasarías la variable id_product
Db::getInstance()->getRow('
SELECT * FROM '.DB_PREFIX.'product
WHERE id_product = '.(int)$id_product
);
Db::getInstance()->insert()
El insert() nos sirve para insertar datos en las tablas. Con los siguientes parámetros:Db::getInstance()->insert(nombre_tabla, array(columna => datos));
Por ejemplo, si queremos insertar en la tabla ps_nombre_tabla los valores ‘id_tabla’, ‘nombre’, ‘edad’ sería el siguiente formato:
Db::getInstance()->insert('nombre_tabla', array('id_tabla' => 1, 'nombre' => 'UriMarti', 'edad' => 29));
Como véis se inserta en la tabla prefijo_nombre_tabla los datos en forma de array. Asignamos a la id_tabla, el número 1, al nombre UriMarti i a la edad 29. Para hacerlo más limpio, recomiendo poner los datos en un array fuera de la función. Cuestión de limpieza dentro del código. De esta manera:
$insert = array(
'id_tabla' => 1,
'nombre' => 'UriMarti',
'edad' => 29
);
Db::getInstance()->insert('nombre_tabla', $insert);