SowerPHP

Framework PHP hecho en Chile

Herramientas de usuario

Herramientas del sitio


mvc:model:database:manager

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

mvc:model:database:manager [2016/04/14 21:37] (actual)
delaf creado
Línea 1: Línea 1:
 +====== Clase Manager ======
 +
 +La clase abstracta [[http://​doc.sowerphp.org/​classsowerphp_1_1core_1_1Model__Datasource__Database__Manager.html|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:
 +
 +{{ http://​doc.sowerphp.org/​classsowerphp_1_1core_1_1Model__Datasource__Database__Manager__inherit__graph.png?​nolink }}
 +
 +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:
 +
 +<code php>
 +$this->​db->​query('​
 +    INSERT INTO tabla VALUES (:val1, :val2)
 +', [':​val1'​ => 'Valor 1', ':​val2'​ => 'Valor 2']);
 +</​code>​
 +
 +Eliminar un elemento de una tabla
 +
 +<code php>
 +$this->​db->​query('​
 +    DELETE FROM tabla WHERE id = :id
 +', [':​id'​ => 123]);
 +</​code>​
 +
 +Seleccionar todos los datos de todos los registros de una tabla:
 +
 +<code php>
 +$this->​db->​getTable('​SELECT * FROM tabla'​);​
 +</​code>​
 +
 +Seleccionar la última fila insertada (ID más alto):
 +
 +<code php>
 +$this->​db->​getRow('​SELECT * FROM tabla ORDER BY id DESC LIMIT 1');
 +</​code>​
 +
 +Obtener todos los IDs de la tabla:
 +
 +<code php>
 +$this->​db->​getCol('​SELECT id FROM tabla'​);​
 +</​code>​
 +
 +Obtener el nombre del registro con cierto ID:
 +
 +<code php>
 +$this->​db->​getValue('​
 +    SELECT nombre FROM tabla WHERE id = :id
 +', [':​id'​ => 123]);
 +</​code>​
 +
 +===== Transacciones =====
 +
 +La clase ''​Manager''​ permite el uso de transacciones. Los métodos disponibles son:
 +
 +<code php>
 +$this->​db->​beginTransaction();​ // recibe =true y se ejecuta en modo serializable (defecto: false)
 +$this->​db->​commit();​
 +$this->​db->​rollback();​
 +</​code>​
 +
 +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:
 +
 +<code php>
 +$this->​db->​beginTransaction();​
 +// ...
 +$this->​db->​beginTransaction();​
 +// ...
 +$this->​db->​commit();​
 +// ...
 +$this->​db->​rollback();​
 +</​code>​
 +
 +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