You are on page 1of 5

Tutorial de FluentPDO para PHP

anexsoft.com/p/119/tutorial-de-fluentpdo-para-php

Actualizado el 23 Enero, 2016 y ledo 4,094 veces


Calificacin: 8.00 / 10
FluentPDO es una librera hecha en PHP bajo PDO que nos permite agilizar la consultas a la base de datos. Es
decir, que escribimos menos cdigo, ya que este es un Query Builder que nos construye las consutlas. Algo similar
a lo que vendra ser el active record de Codeigniter.

Cmo se instala?
Va composer, si no tienes idea que es Composer, pues preocupate o lee este tutorial.
composer require lichtner/fluentpdo

Cmo se usa?
Como FluentPDO corre bajo PDO lo que tenemos que hacer es 2 instancias, una para PDO y la otra para
FluentPDO.
try
{
$pdo = new PDO('mysql:host=localhost;dbname=colegio;charset=utf8', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$fluent = new FluentPDO($pdo);
}
catch(Exception $e)
{
die($e->getMessage());
}
Por defecto lo he configurado para que el retorno de las consultas sea un objeto y lo he establecido para que
muestre los errores.

Cmo funciona?
Es bastante sencillo, vamos a copiar algunos ejemplos de la misma web.

1/5

Select
$query = $fpdo->from('article')->where('id', 1);
$query = $fpdo->from('user', 1);
NOTA: luego de ejecutar al consulta debemos hacer un fetch (un registro) o fetchAll (varios registros) para ejecutar
los registros.

Insert
$values = array('title' => 'article 1', 'content' => 'content 1');
$query = $fpdo->insertInto('article')->values($values)->execute();
$query = $fpdo->insertInto('article', $values)->execute();

Update
$set = array('published_at' => new FluentLiteral('NOW()'));
$query = $fpdo->update('article')->set($set)->where('id', 1)->execute();
$query = $fpdo->update('article', $set, 1)->execute();

Delete
$query = $fpdo->deleteFrom('article')->where('id', 1)->execute();
$query = $fpdo->deleteFrom('article', 1)->execute();

Smart Query?
Lo interesante de esta librera es que nos permite hacer consultas inteligentes sin tener que hacer JOINS.

Ejemplo
Tenemos la tabla artculos y queremos traer el usuario asociado a dicho artculo, una consulta normal sera
haciendo un INNER JOIN a dicha tabla. Con Fluent PDO, sera algo como esto.
$query = $fpdo->from('article')->select('user.name');
Entiendes?, 'user' hace referencia a la tabla que va a cruzar y el valor seguido despus del punto es la columna.
NOTA: esto va a funcionar siempre y cuando, en la tabla que esta haciendo el cruce la columna se llame "user_id"

2/5

y en la tabla que hacemos referencia el nombre sea "id". Si no es nuestro caso podemos hacer un join
manualmente, FluentPDO nos da esa facilidad para especificar los campos en relacin.

Un ejemplo prctico
Bien seores, yo he escrito un CRUD para que puedan entender mejor FluentPDO. Voy a copiar solo el cdigo del
modelo, ya cuando lo descarguen ustedes lo modifican, estudian y/o prueban.
<?php
namespace App\Model;
use App\Lib\DataBase;
use App\Lib\AnexGrid;
class AlumnoModel
{
private $db;
public function __CONSTRUCT()
{
$this->db = DataBase::StartUp();
}
public function Listar()
{
try
{
$anexgrid = new AnexGrid();

$result =
$this->db
->from('alumno')
->select('alumno.*, carrera.Nombre as Carrera')
->orderBy("$anexgrid->columna $anexgrid->columna_orden")
->limit($anexgrid->limite)
->offset($anexgrid->pagina)
->fetchAll();

$total = $this->db
->from("alumno")
->select('COUNT(*) Total')
->fetch()
->Total;
return $anexgrid->responde($result, $total);
}

3/5

catch(Exception $e)
{
die($e->getMessage());
}
}
public function Obtener($id)
{
try
{
return $this->db
->from('alumno', $id)
->fetch();
}
catch (Exception $e)
{
die($e->getMessage());
}
}
public function Eliminar($id)
{
try
{
$this->db->deleteFrom('alumno', $id)
->execute();
}
catch (Exception $e)
{
die($e->getMessage());
}
}
public function Actualizar($data)
{
try
{
$id = $data['id'];
unset($data['id']);
$this->db->update('alumno', $data, $id)
->execute();
}
catch (Exception $e)
{
die($e->getMessage());
}
}
public function Registrar($data)

4/5

{
try
{
$this->db->insertInto('alumno', $data)
->execute();
}
catch (Exception $e)
{
die($e->getMessage());
}
}
}
NOTA: para modificar la cadena de conexin vamos a la carpeta App\Libs\DataBase.php.

FluentPDO GitHub
Documentacin y ejemplos de FluentPDO

Adjuntos
fluentpdo

5/5

You might also like