Professional Documents
Culture Documents
anexsoft.com/p/119/tutorial-de-fluentpdo-para-php
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