Consultar

PIPE proporciona métodos en español para acceder a los datos de las tablas interpretando las cláusulas y palabras reservadas del gestor de base de datos.

PIPE tiene cuatro formas de retornar los datos en las consultas, como una clase, como un objeto, como un arreglo y como un json, por medio de las constantes PIPE::CLASE, PIPE::OBJETO, PIPE::ARREGLO y PIPE::JSON. La forma por defecto del retorno de datos es como una clase.

Si deseamos obtener la consulta SQL generada podemos usar la constante PIPE::SQL.

El método encontrar() nos permite obtener una instancia del constructor de consultas PIPE con los datos asociados a la llave primaria.

<?php

// Por medio del modelo.
$pais = Pais::encontrar(1);

// Por medio del constructor de consultas PIPE.
$pais = PIPE::tabla('paises')->encontrar(1);

// Si nuestra llave primaria no sigue la convención del ORM PIPE, podemos especificarla de la siguiente manera.
$pais = PIPE::tabla('paises')->encontrar(1, 'codigo');

Podemos obtener los datos de la siguiente manera.

<?php

echo $pais->codigo;
echo $pais->nombre;
echo $pais->continente;
echo $pais->region;

El método encontrar() también permite enviar un arreglo de llaves primarias.

<?php

// Por medio del modelo.
$pais = Pais::encontrar([1, 2, 3]);

// Por medio del constructor de consultas PIPE.
$pais = PIPE::tabla('paises')->encontrar([1, 2, 3]);

El constructor de consultas PIPE nos permite realizar sentencias por medio del método sentencia() y sentenciaNativa().

<?php

// Sentencia en español.
$sentencia = PIPE::sentencia('asignar foreign_key_checks = 0');

// Sentencia nativa.
$sentenciaNativa = PIPE::sentenciaNativa('set foreign_key_checks = 0');

A continuación, se muestra un listado de las 36 palabras reservadas del ORM PIPE y su equivalente en el lenguaje SQL de la base de datos para realizar consultas en español con el método consulta().

Palabra Reservada en el ORM PIPE Equivalente en el Lenguaje SQL
actualizar update
agrupar group
alias as
asignar set
como like
concatenar() concat()
contar() count()
de from
dentro into
derecha right
distinto distinct
donde where
eliminar delete
en on
entre between
es is
existe exists
insertar insert
Palabra Reservada en el ORM PIPE Equivalente en el Lenguaje SQL
izquierda left
limite limit
maximo() max()
minimo() min()
no not
nulo null
o or
ordenar order
por by
promedio() avg()
seleccionar select
suma() sum()
teniendo having
todo *
unir join
valores values
xo xor
y and

Veamos algunos ejemplos utilizando la base de datos mundo.

#1 Obtener todos los datos - *.

Obtener todos los datos de la tabla paises por medio del modelo.

<?php
$paises = Pais::todo();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = Pais::todo(PIPE::ARREGLO);

// El método todo() permite enviar un arreglo como parámetro indicando los campos que deseamos obtener.
$paises = Pais::todo(['codigo', 'nombre']);

// También podemos incluir un tipo de retorno.
$paises = Pais::todo(['codigo', 'nombre'], PIPE::ARREGLO);

Obtener todos los datos de la tabla paises por medio del constructor de consultas PIPE.

<?php

$paises = PIPE::tabla('paises')->todo();

// Si deseamos obtener los datos en forma de arreglo lo hacemos de la siguiente manera.
$paises = PIPE::tabla('paises')->todo(PIPE::ARREGLO);

// El método todo() permite enviar un arreglo como parámetro indicando los campos que deseamos obtener.
$paises = PIPE::tabla('paises')->todo(['codigo', 'nombre']);

// También podemos incluir un tipo de retorno.
$paises = PIPE::tabla('paises')->todo(['codigo', 'nombre'], PIPE::ARREGLO);

Obtener todos los datos de la tabla paises por medio de consulta en español.

<?php

$paises = PIPE::consulta('seleccionar todo de paises');

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = PIPE::consulta('seleccionar todo de paises', PIPE::ARREGLO);

Obtener todos los datos de la tabla paises por medio de consulta nativa.

<?php
$paises = PIPE::consultaNativa('select * from paises');

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = PIPE::consultaNativa('select * from paises', PIPE::ARREGLO);

#2 Seleccionar campos - select.

Obtener codigo y nombre de la tabla paises por medio del modelo.

<?php

$paises = Pais::seleccionar('codigo', 'nombre')->obtener();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = Pais::seleccionar('codigo', 'nombre')->obtener(PIPE::ARREGLO);

Obtener codigo y nombre de la tabla paises por medio del constructor de consultas PIPE.

<?php
$paises = PIPE::tabla('paises')->seleccionar('codigo', 'nombre')->obtener();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = PIPE::tabla('paises')->seleccionar('codigo', 'nombre')->obtener(PIPE::ARREGLO);

Obtener codigo y nombre de la tabla paises por medio de consulta en español.

<?php

$paises = PIPE::consulta('seleccionar codigo, nombre de paises');

Obtener codigo y nombre de la tabla paises por medio de consulta nativa.

<?php

$paises = PIPE::consultaNativa('select codigo, nombre from paises');

#3 Condicionales - where.

PIPE permite dos formas de realizar condicionales con el método donde(), de forma tradicional y de forma segura. PIPE también permite escribir los comandos en español dentro de las condicionales.

Obtener todos los datos de la tabla paises donde la cantidad de población este entre 50.000.000 y 100.000.000 por medio del modelo.

<?php

// Forma segura.
$paises = Pais::donde('poblacion entre ? y ?', [50000000, 100000000])->obtener();

// Forma tradicional.
$paises = Pais::donde('poblacion entre 50000000 y 100000000')->obtener();

Obtener todos los datos de la tabla paises donde la cantidad de población este entre 50.000.000 y 100.000.000 por medio del constructor de consultas PIPE.

<?php

// Forma segura.
$paises = PIPE::tabla('paises')
    ->donde('poblacion entre ? y ?', [50000000, 100000000])
    ->obtener();

// Forma tradicional.
$paises = PIPE::tabla('paises')
    ->donde('poblacion entre 50000000 y 100000000')
    ->obtener();

Obtener todos los datos de la tabla paises donde la cantidad de población este entre 50.000.000 y 100.000.000 por medio de consulta en español.

<?php

$paises = PIPE::consulta(
    'seleccionar todo de paises donde poblacion entre 50000000 y 100000000'
);

// Los métodos consulta() y consultaNativa() también permiten enviar los datos de forma segura.
$paises = PIPE::consulta(
    'seleccionar todo de paises donde poblacion entre ? y ?', [50000000, 100000000]
);

// También podemos incluir un tipo de retorno.
$paises = PIPE::consulta(
    'seleccionar todo de paises donde poblacion entre ? y ?', [50000000, 100000000], PIPE::ARREGLO
);

#4 Uniones - inner join, right join, left join.

inner join

Cuando el método unir() no detecta el operador de comparación este incluye por defecto el operador =.

Obtener nombre e idioma de la tabla paises.

<?php

// Por medio del modelo.
$paises = Pais::seleccionar('paises.nombre', 'paises_idiomas.idioma')
    ->unir('paises_idiomas', 'paises.codigo', 'paises_idiomas.pais_codigo')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')
    ->seleccionar('paises.nombre', 'paises_idiomas.idioma')
    ->unir('paises_idiomas', 'paises.codigo', 'paises_idiomas.pais_codigo')
    ->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta(
    'seleccionar paises.nombre, paises_idiomas.idioma de paises
    unir paises_idiomas en paises.codigo = paises_idiomas.pais_codigo'
);

right join

Cuando el método unirDerecha() no detecta el operador de comparación este incluye por defecto el operador =.

Nota: El método unirDerecha() no soporta el controlador sqlite.

Obtener todos los datos de la tabla paises que no tengan idiomas asociados.

<?php

// Por medio del modelo.
$paisesIdiomas = PaisesIdioma::unirDerecha('paises', 'paises_idiomas.pais_codigo', 'paises.codigo')
    ->donde('paises_idiomas.idioma es nulo')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paisesIdiomas = PIPE::tabla('paises_idiomas')
    ->unirDerecha('paises', 'paises_idiomas.pais_codigo', 'paises.codigo')
    ->donde('paises_idiomas.idioma es nulo')
    ->obtener();

// Por medio de consulta en español.
$paisesIdiomas = PIPE::consulta(
    'seleccionar todo de paises_idiomas
    derecha unir paises en paises_idiomas.pais_codigo = paises.codigo
    donde paises_idiomas.idioma es nulo'
);

left join

Cuando el método unirIzquierda() no detecta el operador de comparación este incluye por defecto el operador =.

Obtener todos los datos de la tabla paises que no tengan idiomas asociados.

<?php

// Por medio del modelo.
$paises = Pais::unirIzquierda('paises_idiomas', 'paises.codigo', 'paises_idiomas.pais_codigo')
    ->donde('paises_idiomas.idioma es nulo')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')
    ->unirIzquierda('paises_idiomas', 'paises.codigo', 'paises_idiomas.pais_codigo')
    ->donde('paises_idiomas.idioma es nulo')
    ->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta(
    'seleccionar todo de paises
    izquierda unir paises_idiomas en paises.codigo = paises_idiomas.pais_codigo
    donde paises_idiomas.idioma es nulo'
);

Como complemento de los métodos de uniones, el método relaciones() nos permite establecer los datos relacionados a un modelo que se obtendrán junto a los resultados de la consulta SQL. Este método, permite recibir múltiples parámetros correspondientes a los nombres de relaciones que tengamos definidas en el modelo.

<?php

$pais = Pais::relaciones('idiomas')
    ->donde('poblacion entre ? y ?', [50000000, 100000000])
    ->obtener();

#5 Agrupaciones - group by.

Obtener la cantidad de paises de cada continente.

<?php

// Por medio del modelo.
$paises = Pais::seleccionar('continente', 'contar(*) alias cantidad_paises')
    ->agruparPor('continente')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')
    ->seleccionar('continente', 'contar(*) alias cantidad_paises')
    ->agruparPor('continente')
    ->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta(
    'seleccionar continente, contar(*) alias cantidad_paises de paises agrupar por continente'
);

El método agruparPor() también permite enviar un arreglo definiendo varias agrupaciones.

<?php

// Por medio del modelo.
$paises = Pais::seleccionar('continente', 'region', 'contar(*) alias cantidad_paises')
    ->agruparPor(['continente', 'region'])
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->seleccionar('continente', 'region', 'contar(*) alias cantidad_paises')
    ->agruparPor(['continente', 'region'])
    ->obtener();

#6 Condicionales - having.

Obtener los continentes que tengan más de 40 paises.

<?php

// Por medio del modelo.
$paises = Pais::seleccionar('continente', 'contar(*) alias cantidad_paises')
    ->agruparPor('continente')
    ->teniendo('cantidad_paises > 40')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')
    ->seleccionar('continente', 'contar(*) alias cantidad_paises')
    ->agruparPor('continente')
    ->teniendo('cantidad_paises > 40')
    ->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta(
  'seleccionar continente, contar(*) alias cantidad_paises de paises
  agrupar por continente teniendo cantidad_paises > 40'
);

#7 Ordenar - order by.

Cuando el método ordenarPor() no detecta el tipo de orden este incluye por defecto el tipo asc.

Obtener todos los datos de la tabla paises ordenados por nombre ascendentemente.

<?php

// Por medio del modelo.
$paises = Pais::ordenarPor('nombre')->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->ordenarPor('nombre')->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta('seleccionar todo de paises ordenar por nombre');

Obtener todos los datos de la tabla paises ordenados por nombre descendentemente.

<?php

// Por medio del modelo.
$paises = Pais::ordenarPor('nombre', 'desc')->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->ordenarPor('nombre', 'desc')->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta('seleccionar todo de paises ordenar por nombre desc');

El método ordenarPor() también permite enviar un arreglo definiendo varias ordenaciones.

<?php

// Por medio del modelo.
$paises = Pais::ordenarPor(['nombre', 'continente'])->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->ordenarPor(['nombre', 'continente'])->obtener();

#8 Límite - limit.

Cuando el método limite() no detecta el segundo parámetro este incluye por defecto un límite simple.

Obtener los dos primeros registros de la tabla paises.

<?php

// Por medio del modelo.
$paises = Pais::limite(2)->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->limite(2)->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta('seleccionar todo de paises limite 2');

Obtener todos los datos de la tabla paises desde la posición 5 hasta la posición 10.

<?php

// Por medio del modelo.
$paises = Pais::limite(5, 10)->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->limite(5, 10)->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta('seleccionar todo de paises limite 5, 10');

#9 Distinto - distinct.

Obtener todos los continentes de la tabla paises.

<?php

// Por medio del modelo.
$paises = Pais::distinto()->seleccionar('continente')->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->distinto()->seleccionar('continente')->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta('seleccionar distinto continente de paises');

#10 Alias - as.

Obtener todos los países que tengan menos de 5 ciudades por medio de subconsulta.

<?php

// Por medio del modelo.
$paises = Pais::alias('p')
    ->seleccionar('p.nombre')
    ->donde('(seleccionar contar(*) de ciudades donde pais_codigo = p.codigo teniendo contar(*) < 5)')
    ->obtener();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')
    ->alias('p')
    ->seleccionar('p.nombre')
    ->donde('(seleccionar contar(*) de ciudades donde pais_codigo = p.codigo teniendo contar(*) < 5)')
    ->obtener();

// Por medio de consulta en español.
$paises = PIPE::consulta(
    'seleccionar p.nombre de paises alias p 
    donde (seleccionar contar(*) de ciudades donde pais_codigo = p.codigo teniendo contar(*) < 5)'
);

Consultas básicas por medio de métodos.

#11 Obtener el primer registro - primero().

Obtener el primer registro de la tabla paises por medio del modelo.

<?php

$pais = Pais::primero();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = Pais::primero(PIPE::ARREGLO);

Obtener el primer registro de la tabla paises por medio del constructor de consultas PIPE.

<?php
$pais = PIPE::tabla('paises')->primero();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = PIPE::tabla('paises')->primero(PIPE::ARREGLO);

Obtener los diez primeros registros de la tabla paises por medio del modelo.

<?php

$paises = Pais::primero(10);

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = Pais::primero(10, PIPE::ARREGLO);

Obtener los diez primeros registros de la tabla paises por medio del constructor de consultas PIPE.

<?php

$paises = PIPE::tabla('paises')->primero(10);

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$paises = PIPE::tabla('paises')->primero(10, PIPE::ARREGLO);

#12 Obtener el último registro - ultimo().

Debido a que en el constructor de consultas PIPE no disponemos de un modelo que nos permita omitir las convenciones, debemos indicarle al método ultimo() cual es la lleve primaria.

Obtener el último registro de la tabla paises por medio del modelo.

<?php

$pais = Pais::ultimo();

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = Pais::ultimo(PIPE::ARREGLO);

Obtener el último registro de la tabla paises por medio del constructor de consultas PIPE.

<?php

$pais = PIPE::tabla('paises')->ultimo('codigo');

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = PIPE::tabla('paises')->ultimo('codigo', PIPE::ARREGLO);

Obtener los diez últimos registros de la tabla paises por medio del modelo.

<?php

$pais = Pais::ultimo(10);

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = Pais::ultimo(10, PIPE::ARREGLO);

Obtener los diez últimos registros de la tabla paises por medio del constructor de consultas PIPE.

<?php

$pais = PIPE::tabla('paises')->ultimo('codigo', 10);

// Si deseamos obtener los datos con un tipo de retorno específico lo hacemos de la siguiente manera.
$pais = PIPE::tabla('paises')->ultimo('codigo', 10, PIPE::ARREGLO);

#13 Contar resultados de consulta SQL - contar().

Contar la cantidad de registros en la tabla paises.

<?php

// Por medio del modelo.
$cantidadPaises = Pais::contar();

// Podemos definir un campo específico.
$cantidadPaises = Pais::contar('nombre');

// Podemos obtener la cantidad por medio del resultado de un condicional.
$cantidadPaises = Pais::donde("nombre como '%a'")->contar();

// Por medio del constructor de consultas PIPE.
$cantidadPaises = PIPE::tabla('paises')->contar();

#14 Obtener el valor máximo del campo especificado - maximo().

Obtener la población máxima en la tabla paises.

<?php

// Por medio del modelo.
$poblacionMaxima = Pais::maximo('poblacion');

// Podemos obtener la población máxima por medio del resultado de un condicional.
$poblacionMaxima = Pais::donde("nombre como '%a'")->maximo('poblacion');

// Por medio del constructor de consultas PIPE.
$poblacionMaxima = PIPE::tabla('paises')->maximo('poblacion');

#15 Obtener el valor mínimo del campo especificado - minimo().

Obtener la población mínima en la tabla paises.

<?php

// Por medio del modelo.
$poblacionMinima = Pais::minimo('poblacion');

// Podemos obtener la población mínima por medio del resultado de un condicional.
$poblacionMinima = Pais::donde("nombre como '%a'")->minimo('poblacion');

// Por medio del constructor de consultas PIPE.
$poblacionMinima = PIPE::tabla('paises')->minimo('poblacion');

#16 Obtener el valor promedio del campo especificado - promedio().

Obtener el promedio de población en la tabla paises.

<?php

// Por medio del modelo.
$promedio = Pais::promedio('poblacion');

// Podemos promediar la población por medio del resultado de un condicional.
$promedio = Pais::donde("nombre como '%a'")->promedio('poblacion');

// Por medio del constructor de consultas PIPE.
$promedio = PIPE::tabla('paises')->promedio('poblacion');

#17 Obtener la suma del campo especificado - suma().

Obtener la suma de la población en la tabla paises.

<?php

// Por medio del modelo.
$suma = Pais::suma('poblacion');

// Podemos sumar la población por medio del resultado de un condicional.
$suma = Pais::donde("nombre como '%a'")->suma('poblacion');

// Por medio del constructor de consultas PIPE.
$suma = PIPE::tabla('paises')->suma('poblacion');

#18 Verificar que la consulta SQL ha retornado un resultado. - existe().

El método existe() retorna true cuando encuentra resultados.

<?php

// Por medio del modelo.
$paises = Pais::existe();

// Podemos realizar la verificación por medio del resultado de un condicional.
$paises = Pais::donde("nombre como '%a'")->existe();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->existe();

#19 Verificar que la consulta SQL no ha retornado un resultado. - noExiste().

El método noExiste() retorna true cuando no encuentra resultados.

<?php

// Por medio del modelo.
$paises = Pais::noExiste();

// Podemos realizar la verificación por medio del resultado de un condicional.
$paises = Pais::donde("nombre como '%a'")->noExiste();

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->noExiste();

#20 Incrementar el valor del campo especificado. - incrementar().

Incrementar la población en la tabla paises.

<?php

// Por medio del modelo.
$paises = Pais::incrementar('poblacion');

// Podemos pasar por un segundo parámetro el valor del incremento. Por defecto es 1.
$paises = Pais::incrementar('poblacion', 7);

// Podemos incrementar la población por medio del resultado de un condicional.
$paises = Pais::donde("nombre como '%a'")->incrementar('poblacion');

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->incrementar('poblacion');

#21 Decrementar el valor del campo especificado. - decrementar().

Decrementar la población en la tabla paises.

<?php

// Por medio del modelo.
$paises = Pais::decrementar('poblacion');

// Podemos pasar por un segundo parámetro el valor del decremento. Por defecto es 1.
$paises = Pais::decrementar('poblacion', 7);

// Podemos decrementar la población por medio del resultado de un condicional.
$paises = Pais::donde("nombre como '%a'")->decrementar('poblacion');

// Por medio del constructor de consultas PIPE.
$paises = PIPE::tabla('paises')->decrementar('poblacion');

PIPE lanza tres tipos de excepciones, ORM, SQL y Exception, las cuales podemos manejar de la siguiente manera.

<?php

use Exception;
use PIPE\Clases\Excepciones\ORM;
use PIPE\Clases\Excepciones\SQL;

try {
    // Todo tu código aquí.
} catch (ORM $excepcion) {
    // Todo tu código aquí.
} catch (SQL $excepcion) {
    // Todo tu código aquí.
} catch (Exception $excepcion) {
    // Todo tu código aquí.
}

Si utilizas el Modelo para interactuar con los datos de la base de datos, tendrás la ventaja de poder omitir las convenciones que tiene el ORM PIPE y adaptarse a la estructura que tenga tu tabla en la base de datos, ya que el Constructor de Consultas se adapta por defecto a las convenciones.