Query
Y esto.. por qué?
Pues por el simple echo de hacerlo :)
Ejemplos de uso:
Importación
PHP
require 'Query.class.php';
JS
const Query = require('Query.class.js')
Vía NPM
npm i querysqljs
const Query = require('querysqljs')
Instancia
PHP
$q = new Query();
JS
const q = new Query()
Consultas
PHP
$q->select([ 'id', 'nombre' ])
->from('usuarios u')
->join('INNER', 'datos_usuarios d', [ 'u.id = d.id_usuario' ])
->where([ 'edad > 30', 'pelo = "marrón"' ])
->andWhere([ 'nombre = "maikel"' ])
->orderBy([ 'nombre ASC' ])
->groupBy([ 'edad' ])
->having([ 'edad > 3' ])
->limit(2, 10);
JS
q.select([ 'id', 'nombre' ])
.from('usuarios u')
.join('INNER', 'datos_usuarios d', [ 'u.id = d.id_usuario' ])
.where([ 'edad > 30', 'pelo = "marrón"' ])
.andWhere([ 'nombre = "maikel"' ])
.orderBy([ 'nombre ASC' ])
.groupBy([ 'edad' ])
.having([ 'edad > 3' ])
.limit(2, 10)
También puede separarse:
PHP
$q->select([ 'id', 'nombre' ])->from('usuarios u')->where([ 'color_pelo = "castaño"' ]);
if($mayoresDeEdad){
$q->andWhere([ 'edad >= 18' ]);
}
$q->limit(5);
JS
q.select([ 'id', 'nombre' ])->from('usuarios u')->where([ 'color_pelo = "castaño"' ])
if(mayoresDeEdad){
q.andWhere([ 'edad >= 18' ])
}
$q->limit(5);
PHP
$q->insert('usuarios')
->fields([ 'id', 'nombre' ])
->values([ 1234, '"Gaby"' ]);
JS
q.insert('usuarios')
.fields([ 'id', 'nombre' ])
.values([ 1234, '"Gaby"' ])
PHP
$q->delete()
->from('usuarios')
->where([ 'nombre = "raule"' ])
->limit(1);
JS
q.delete()
.from('usuarios')
.where([ 'nombre = "raule"' ])
.limit(1)
PHP
$q->update('usuarios')
->set([ 'edad = 50' ])
->where([ 'id = 2' ])
->limit(1);
JS
q.update('usuarios')
.set([ 'edad = 50' ])
.where([ 'id = 2' ])
.limit(1)
Para obtener la consulta final
PHP
$strQuery = $q->getQuery();
JS
const strQuery = q.getQuery()
NOTA: Los métodos select
, where
, andWhere
, orderBy
, groupBy
y having
pueden recibir como parámetro un array
o un string
Ejemplo:
PHP
$q->select('id, nombre, edad')
->from('usuarios')
->where('edad > 18')
->orderBy('edad DESC')
->groupBy('edad')
->having('id > 2');
JS
q.select('id, nombre, edad')
.from('usuarios')
.where('edad > 18')
.orderBy('edad DESC')
.groupBy('edad')
.having('id > 2')
JOINS
Se pueden usar los distintos tipos de métodos para unir tablas
El método genérico join
se puede usar para los joins que carecen de aliases como CROSS JOIN, LEFT OUTTER JOIN, etc.
->join($joinType, $table, $on)
:$q->join('INNER', 'usuarios_datos ud', [ u.id = ud.id_usuario ])
->innerJoin($table, $on)
:$q->innerJoin('usuarios_datos ud', [ u.id = ud.id_usuario ])
->leftJoin($table, $on)
:$q->leftJoin('usuarios_datos ud', [ u.id = ud.id_usuario ])
->rightJoin($table, $on)
:$q->rightJoin('usuarios_datos ud', [ u.id = ud.id_usuario ])
Paginación
Existe un método page
para el cálculo del offset en la paginación:
PHP
$q->select('id, nombre, edad')
->from('usuarios')
->where('edad > 18')
->orderBy('edad DESC')
->groupBy('edad')
->having('id > 2')
->limit(5)
->page(2);
JS
q.select('id, nombre, edad')
.from('usuarios')
.where('edad > 18')
.orderBy('edad DESC')
.groupBy('edad')
.having('id > 2')
.limit(5)
.page(2)