Anexsoft | Blog y dictado de cursos de Tecnología

En este encontrarás tutoriales de tecnología como PHP, ASP.NET MVC, Front-End, entre otros y cursos exigentes de modalidad online que te ayudarán a crecer profesionalmente.

Tutorial de FluentPDO para PHP
Actualizado el 23 Enero, 2016 y leído 6,680 veces
Calificación: 8.67 / 10

Tutorial de FluentPDO para PHP

Anexsoft

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.

 

¡Adquiera ya!

  • Código de fuente de Red Social desarrollada en ASP.NET MVC

    Código de fuente de Red Social desarrollada en ASP.NET MVC
  • Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#

    Software de Portafolio Profesional hecho en ASP.NET MVC 5 C#
  • Software de Venta e Inventario hecho en PHP y Codeigniter

    Software de Venta e Inventario hecho en PHP y Codeigniter

Últimas publicaciones

Encuesta

¿Cómo nos conociste?

Síguenos

Estudia con nosotros y crece profesionalmente

Nuestros cursos han sido hecho en base a lo que demanda el mercado hoy en día.
La experiencia obtenida es la de un ambiente laboral.

Anexsoft
© 2017 Anexsoft, blog y cursos online de TI.