SowerPHP

Framework PHP hecho en Chile

Herramientas de usuario

Herramientas del sitio


mvc:model:database:uso_basico

Uso básico de bases de datos

Se provee de una capa intermedia entre PDO y la base de datos, actualmente está disponible el soporte para PostgreSQL, MySQL/MariaDB y SQLite. Esta capa intermedia añade funcionalidades a PDO extendiendo dicha clase.

Configuración

La configuración de la base de datos se realiza mediante la clase Configure y es definida en el archivo Config/core.php:

// Base de datos
// conexión con nombre: default
\sowerphp\core\Configure::write('database.default', [
  'type' => 'PostgreSQL',
  'name' => 'database',
  'user' => 'usuario',
  'pass' => 'clave'
]);

En caso de querer especificar una IP o puerto diferentes a los por defecto, utilizar los índies host y port respectivamente.

Clase Database

Se define la clase Model_Datasource_Database la cual funciona como un wrapper para poder cargar la clase correspondiente, crear el objeto y realizar la conexión a la base de datos. La clase que se carga depende de los parámetros definidos en la configuración de la conexión a la base de datos.

La clase sirve como un contenedor para las diferentes conexiones, cada una de estas posee un nombre, así esta clase puede permitir la conexión a múltiples bases de datos (incluyendo bases de datos diferentes).

Un ejemplo sencillo del uso de la clase Database que recupera la conexión a la base de datos de nombre default definida en Config/core.php es:

// recuperar objeto para el trabajo con la base de datos
$db = &\sowerphp\core\Model_Datasource_Database::get();

Se podría querer recuperar otra conexión, esto se haría indicando el nombre:

// conexión con nombre otraconexion
$db = &\sowerphp\core\Model_Datasource_Database::get('otraconexion');

Una vez que se obtiene el objeto se pueden utilizar los métodos asociados a este (ver ejemplo más abajo).

Ejemplo de uso de métodos para acceso a la base de datos

Supongamos el siguiente esquema en una base de datos PostgreSQL.

bd_ejemplo.sql
BEGIN;
 
-- Parámetros de la aplicación
DROP TABLE IF EXISTS parametro CASCADE;
CREATE TABLE parametro (
	modulo CHARACTER VARYING(60) NOT NULL,
	nombre CHARACTER VARYING(20) NOT NULL,
	valor CHARACTER VARYING(200) NOT NULL DEFAULT ''::CHARACTER VARYING,
	audit_programa CHARACTER VARYING(20) DEFAULT 'miframework'::CHARACTER VARYING NOT NULL,
	audit_usuario CHARACTER VARYING(20) DEFAULT 'miframework'::CHARACTER VARYING NOT NULL,
	audit_creado TIMESTAMP WITHOUT TIME zone NOT NULL DEFAULT now(),
	audit_modificado TIMESTAMP WITHOUT TIME zone NOT NULL DEFAULT now(),
	CONSTRAINT parametro_pkey PRIMARY KEY (modulo, nombre)
);
COMMENT ON TABLE parametro IS 'Parámetros de la aplicación y sus módulos';
 
-- procedimiento para obtener los parámetros
CREATE OR REPLACE FUNCTION getParametros(c_result refcursor)
RETURNS SETOF refcursor
AS $BODY$
BEGIN
	OPEN c_result FOR SELECT * FROM parametro;
	RETURN NEXT c_result;
END;
$BODY$
LANGUAGE plpgsql;
 
-- Procedimiento para calcular la edad de "algo" a partir de su fecha
CREATE OR REPLACE FUNCTION edad(v_fecha DATE)
RETURNS INTEGER AS
$BODY$
BEGIN
	RETURN FLOOR(((DATE_PART('YEAR',CURRENT_DATE)-DATE_PART('YEAR',v_fecha))* 372 + (DATE_PART('MONTH',CURRENT_DATE) - DATE_PART('MONTH',v_fecha))*31 + (DATE_PART('DAY',CURRENT_DATE)-DATE_PART('DAY',v_fecha)))/372);
END
$BODY$
LANGUAGE plpgsql;
 
COMMIT;

Ejemplo de uso de la base de datos con este esquema:

bd_ejemplo.php
<?php
 
// obtener conexión
// se asume que la configuración está guardada en config.php
$db = &\sowerphp\core\Model_Datasource_Database::get();
 
// casos de uso
// descomentar cada uno de los casos para probarlos
//debug($db->getTableWithColsNames('SELECT * FROM parametro'));
//debug($db->getTable('SELECT * FROM parametro'));
//debug($db->getRow('SELECT * FROM parametro LIMIT 1'));
//debug($db->getCol('SELECT valor FROM parametro'));
//debug($db->getValue('SELECT valor FROM parametro LIMIT 1'));
//$db->toCSV('SELECT * FROM parametro', 'parametros', 'parametro');
//debug($db->exec('edad', '1986-01-02'));
//debug($db->getValueFromSP('edad', '1990-06-27'));
//debug($db->getTableFromSP('getParametros'));
//debug($db->getRowFromSP('getParametros'));
//debug($db->getColFromSP('getParametros'));
//debug($db->getInfoFromTable('parametro'));
 
// cerrar conexión a la base de datos
// esto cierra todas las conexiones abiertas
\sowerphp\core\Model_Datasource_Database::close();

Para más información revisar la documentación de la clase Manager

mvc/model/database/uso_basico.txt · Última modificación: 2016/04/14 21:15 por delaf