SowerPHP

Framework PHP hecho en Chile

Herramientas de usuario

Herramientas del sitio


mvc:model:database:manager

Clase Manager

La clase abstracta Model_Datasource_Database_Manager es una de las clases más importantes en el framework, ya que de esta heredan los drivers de las diferentes bases de datos. En el siguiente diagrama se ve la herencia:

Se puede observar que la clase Manager extiende las funcionalidades de PDO (clase de nativa de PHP para manejar bases de datos). A su vez, la clase Manager es extendida por los diferentes drivers de las bases de datos. La idea de estos drivers es poder ofrecer métodos específicos para cada base de datos. Por ejemplo proveen los métodos para obtener el listado de tablas de la base de datos.

Consultas preparadas

Todas las consultas realizadas a través del Manager se pueden trabajar como consultas preparadas muy fácilmente. Para esto cada método que permite hacer consultas puede recibir dos parámetros, en el primer parámetro está la consulta SQL y en el segundo parámetro está un arreglo con los datos a enlazar con la consulta.

A continuación se muestran ejemplos de algunos métodos y como usar consultas preparadas.

Métodos más usados

El objeto que representa la base de datos en un modelo está en el atributo db del modelo, este objeto tiene tiene diferentes métodos. Los que se utilizarán comúnmente se mencionan a continuación.

Insertar un elemento en una tabla:

$this->db->query('
    INSERT INTO tabla VALUES (:val1, :val2)
', [':val1' => 'Valor 1', ':val2' => 'Valor 2']);

Eliminar un elemento de una tabla

$this->db->query('
    DELETE FROM tabla WHERE id = :id
', [':id' => 123]);

Seleccionar todos los datos de todos los registros de una tabla:

$this->db->getTable('SELECT * FROM tabla');

Seleccionar la última fila insertada (ID más alto):

$this->db->getRow('SELECT * FROM tabla ORDER BY id DESC LIMIT 1');

Obtener todos los IDs de la tabla:

$this->db->getCol('SELECT id FROM tabla');

Obtener el nombre del registro con cierto ID:

$this->db->getValue('
    SELECT nombre FROM tabla WHERE id = :id
', [':id' => 123]);

Transacciones

La clase Manager permite el uso de transacciones. Los métodos disponibles son:

$this->db->beginTransaction(); // recibe =true y se ejecuta en modo serializable (defecto: false)
$this->db->commit();
$this->db->rollback();

Si se ha llamado X veces a beginTransaction() se deberán hacer X llamadas a commit() para que el commit verdadero sea realizado. En otras palabras si ocurriese lo siguiente:

$this->db->beginTransaction();
// ...
$this->db->beginTransaction();
// ...
$this->db->commit();
// ...
$this->db->rollback();

Ambas transacciones serían abortada, a pesar de haberse ejecutado un commit. Lo anterior ya que la última llamada hizo un rollback(). Si se desea que el commit si tenga efectos, se deberá hacer el commit y luego iniciar la segunda transacción. Esto puede ocurrir generalmente cuando se hacen llamadas entre diferentes objetos.

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