1. Go to this page and download the library: Download omegaalfa/query-builder library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
omegaalfa / query-builder example snippets
declare(strict_types=1);
use Omegaalfa\QueryBuilder\connection\PDOConnection;
use Omegaalfa\QueryBuilder\connection\DatabaseSettings;
use Omegaalfa\QueryBuilder\QueryBuilder;
use Omegaalfa\QueryBuilder\Paginator;
// 1. Configurar conexão
$config = new DatabaseSettings(
driver: 'mysql',
host: 'localhost',
database: 'meu_banco',
username: 'root',
password: '',
port: 3306,
charset: 'utf8mb4'
);
// 2. Criar instâncias
$connection = new PDOConnection($config);
$paginator = new Paginator();
$qb = new QueryBuilder($connection, $paginator);
// 3. Usar!
$result = $qb
->select('usuarios', ['id', 'nome', 'email'])
->where('ativo', SqlOperator::EQUALS, true)
->orderBy('nome', OrderDirection::ASC)
->limit(10)
->execute();
foreach ($result->data as $usuario) {
echo "{$usuario['nome']} - {$usuario['email']}\n";
}
public function select(string $table, array $fields = ['*']): self
// SELECT básico
$qb->select('usuarios');
// Campos específicos
$qb->select('produtos', ['id', 'nome', 'preco']);
// Com funções SQL
$qb->select('pedidos', ['id', 'COUNT(*) as total', 'SUM(valor) as total_valor']);
// Com aliases de tabela
$qb->select('usuarios', ['u.id', 'u.nome', 'u.email'])->alias('u');
public function orWhere(string $column, SqlOperator|string $operator, mixed $value): self
// WHERE status = 'pendente' OR status = 'processando'
$qb->select('pedidos')
->where('status', SqlOperator::EQUALS, 'pendente')
->orWhere('status', SqlOperator::EQUALS, 'processando');
// WHERE (categoria = 'A' OR categoria = 'B') AND ativo = true
$qb->select('produtos')
->where('categoria', SqlOperator::EQUALS, 'A')
->orWhere('categoria', SqlOperator::EQUALS, 'B')
->where('ativo', SqlOperator::EQUALS, true);
public function whereIn(string $column, array $values): self
// WHERE id IN (1, 2, 3, 4, 5)
$qb->select('usuarios')
->whereIn('id', [1, 2, 3, 4, 5]);
// WHERE status IN ('pendente', 'aprovado', 'processando')
$qb->select('pedidos')
->whereIn('status', ['pendente', 'aprovado', 'processando']);
public function whereNotIn(string $column, array $values): self
// WHERE status NOT IN ('cancelado', 'rejeitado')
$qb->select('pedidos')
->whereNotIn('status', ['cancelado', 'rejeitado']);
public function whereBetween(string $column, array $range): self
// WHERE preco BETWEEN 100 AND 500
$qb->select('produtos')
->whereBetween('preco', [100, 500]);
// WHERE data BETWEEN '2024-01-01' AND '2024-12-31'
$qb->select('pedidos')
->whereBetween('criado_em', ['2024-01-01', '2024-12-31']);
public function whereNotBetween(string $column, array $range): self
public function whereNull(string $column): self
// WHERE deletado_em IS NULL
$qb->select('usuarios')
->whereNull('deletado_em');
public function whereNotNull(string $column): self
// WHERE email IS NOT NULL
$qb->select('usuarios')
->whereNotNull('email');
public function join(
string $table,
string $key,
string $operator,
string $refer,
JoinType $type = JoinType::INNER
): self
// Contar pedidos por status
$qb->select('pedidos', ['status', 'COUNT(*) as total'])
->groupBy('status');
// Múltiplos agrupamentos
$qb->select('vendas', ['ano', 'mes', 'SUM(valor) as total'])
->groupBy('ano')
->groupBy('mes');
public function having(string $column, SqlOperator $operator, mixed $value): self
// Categorias com mais de 10 produtos
$qb->select('produtos', ['categoria_id', 'COUNT(*) as total'])
->groupBy('categoria_id')
->having('total', SqlOperator::GREATER_THAN, 10);
// Usuários com mais de 5 pedidos
$qb->select('pedidos', ['usuario_id', 'COUNT(*) as total_pedidos'])
->groupBy('usuario_id')
->having('total_pedidos', SqlOperator::GREATER_THAN, 5);
public function havingRaw(string $condition): self
// Total de usuários
$total = $qb->select('usuarios')->count();
// Total de usuários ativos
$ativos = $qb->select('usuarios')
->where('ativo', SqlOperator::EQUALS, true)
->count();
// Contar valores únicos
$categorias = $qb->select('produtos')->count('DISTINCT categoria_id');
public function sum(string $column): float
// Total de vendas
$total = $qb->select('pedidos')->sum('valor');
// Total de vendas aprovadas
$totalAprovado = $qb->select('pedidos')
->where('status', SqlOperator::EQUALS, 'aprovado')
->sum('valor');
public function avg(string $column): float
// Preço médio
$precoMedio = $qb->select('produtos')->avg('preco');
// Nota média de avaliações
$notaMedia = $qb->select('avaliacoes')
->where('produto_id', SqlOperator::EQUALS, 123)
->avg('nota');
public function min(string $column): mixed
// Menor preço
$menorPreco = $qb->select('produtos')
->where('ativo', SqlOperator::EQUALS, true)
->min('preco');
public function max(string $column): mixed
// Maior preço
$maiorPreco = $qb->select('produtos')->max('preco');
// Data mais recente
$ultimaCompra = $qb->select('pedidos')
->where('usuario_id', SqlOperator::EQUALS, 123)
->max('criado_em');
public function exists(): bool
// Verificar se usuário existe
$existe = $qb->select('usuarios')
->where('email', SqlOperator::EQUALS, '[email protected]')
->exists();
if ($existe) {
echo "Email já cadastrado!";
}
public function raw(string $query, array $params = []): self
// Query complexa com CTE
$qb->raw('
WITH vendas_por_mes AS (
SELECT DATE_FORMAT(data, "%Y-%m") as mes, SUM(valor) as total
FROM vendas
WHERE ano = ?
GROUP BY mes
)
SELECT * FROM vendas_por_mes WHERE total > ?
', [2024, 10000])->execute();
// Window functions
$qb->raw('
SELECT
nome,
valor,
ROW_NUMBER() OVER (PARTITION BY categoria ORDER BY valor DESC) as ranking
FROM produtos
')->execute();
public function execute(bool $bufferedQuery = true): QueryResultDTO
class QueryResultDTO {
public iterable $data; // Resultados (array ou Generator)
public int $count; // Número de linhas afetadas
public ?PaginationDTO $pagination; // Dados de paginação (se limit usado)
}
$result = $qb->select('usuarios')->execute();
// Iterar resultados
foreach ($result->data as $usuario) {
echo "{$usuario['nome']}\n";
}
// Informações
echo "Total: {$result->count} registros\n";
// Paginação (se usou limit)
if ($result->pagination) {
echo "Página {$result->pagination->currentPage} de {$result->pagination->totalPages}\n";
echo "Total de itens: {$result->pagination->totalItems}\n";
}
public function getQuerySql(): string
$sql = $qb->select('usuarios')
->where('ativo', SqlOperator::EQUALS, true)
->getQuerySql();
echo $sql;
// SELECT * FROM `usuarios` WHERE `ativo` = :param0
public function toSql(bool $withParams = false): string
$qb->select('usuarios')
->where('id', SqlOperator::EQUALS, 123)
->where('nome', SqlOperator::LIKE, '%João%');
// SQL com placeholders
echo $qb->toSql();
// SELECT * FROM `usuarios` WHERE `ativo` = :param0 AND `nome` LIKE :param1
// SQL com valores (apenas para debug!)
echo $qb->toSql(true);
// SELECT * FROM `usuarios` WHERE `ativo` = 123 AND `nome` LIKE '%João%'
// Produtos mais vendidos do mês com informações de categoria
$result = $qb->raw('
SELECT
p.id,
p.nome,
c.nome as categoria,
p.preco,
vendas.total_vendido,
vendas.receita_total
FROM produtos p
INNER JOIN categorias c ON p.categoria_id = c.id
INNER JOIN (
SELECT
produto_id,
SUM(quantidade) as total_vendido,
SUM(subtotal) as receita_total
FROM itens_pedido ip
INNER JOIN pedidos ped ON ip.pedido_id = ped.id
WHERE
ped.status = ? AND
MONTH(ped.criado_em) = MONTH(CURRENT_DATE) AND
YEAR(ped.criado_em) = YEAR(CURRENT_DATE)
GROUP BY produto_id
) vendas ON p.id = vendas.produto_id
ORDER BY vendas.receita_total DESC
LIMIT 10
', ['concluido'])->execute();
foreach ($result->data as $produto) {
echo "{$produto['nome']} ({$produto['categoria']})\n";
echo " Vendidos: {$produto['total_vendido']}\n";
echo " Receita: R$ " . number_format($produto['receita_total'], 2) . "\n\n";
}
// ✅ SEGURO - Valores sempre com prepared statements
$qb->where('email', SqlOperator::EQUALS, $_POST['email']);
// ✅ SEGURO - Whitelist para campos dinâmicos
$allowedFields = ['id', 'nome', 'email'];
$fields = array_intersect($_GET['fields'], $allowedFields);
$qb->select('usuarios', $fields);
// ⚠️ CUIDADO - O método select() agora aplica quoteIdentifier automaticamente,
// mas ainda é recomendado validar input de usuário para evitar erros de lógica.
$qb->select('usuarios', $_GET['fields']);
Memória Peak para 1 Milhão de Registros
Omegaalfa (streaming): ████████████████████ 32.02 MB
Laravel (cursor): ~0.00 MB*
* Valores medidos pelo script de benchmark
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.