Aprende en casa Ir a KODOTI
Aprende en casa KODOTI

Tutorial de FluentPDO para PHP

FluentPDO es un constructor de SQL para PHP que nos facilita la vida. Les adjunto un ejemplo práctico de un CRUD.

Rodríguez Patiño, Eduardo
Rodríguez Patiño, Eduardo
2020-07-03 | 13,917 lecturas

FluentPDO es una librería hecha en PHP bajo PDO que nos permite agilizar la consultas a la base de datos. Es decir, que escribimos menos código, ya que este es un Query Builder que nos construye las consutlas. Algo similar a lo que vendría ser el active record de Codeigniter.

¿Cómo se instala?

Vía composer, si no tienes idea que es Composer, pues preocupate o lee este tutorial.

composer require lichtner/fluentpdo

¿Cómo 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.

¿Cómo funciona?

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

Select

$query = $fpdo->from('article')->where('id', 1);
// or shortly if you select one row by primary key
$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();
// or shortly
$query = $fpdo->insertInto('article', $values)->execute();

Update

$set = array('published_at' => new FluentLiteral('NOW()'));
$query = $fpdo->update('article')->set($set)->where('id', 1)->execute();
// or shortly if you update one row by primary key
$query = $fpdo->update('article', $set, 1)->execute();

Delete

$query = $fpdo->deleteFrom('article')->where('id', 1)->execute();
// or shortly if you delete one row by primary key
$query = $fpdo->deleteFrom('article', 1)->execute();

¿Smart Query?

Lo interesante de esta librería es que nos permite hacer consultas inteligentes sin tener que hacer JOINS.

Ejemplo

Tenemos la tabla artículos y queremos traer el usuario asociado a dicho artículo, una consulta normal sería haciendo un INNER JOIN a dicha tabla. Con Fluent PDO, sería 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 después 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" 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 relación.

Un ejemplo práctico

Bien señores, yo he escrito un CRUD para que puedan entender mejor FluentPDO. Voy a copiar solo el código 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
        {
            /* Anex Grid */
            $anexgrid = new AnexGrid();

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

            /* El total de registros */
            $total = $this->db
                          ->from("alumno")
                          ->select('COUNT(*) Total')
                          ->fetch()
                          ->Total;

            return $anexgrid->responde($result, $total);
        }
        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)
    {
        try 
        {
            $this->db->insertInto('alumno', $data)
                     ->execute();
        }
        catch (Exception $e) 
        {
            die($e->getMessage());
        }
    }
}

NOTA: para modificar la cadena de conexión vamos a la carpeta App\Libs\DataBase.php.


Estudia con nosotros

🚀 Mejora tus oportunidades laborales