Executa a consulta com DbPHP e encadeia operações LINQ em memória diretamente via ->linq() com total interoperabilidade.
| id_produto | nome_produto | nome_categoria | preco | estoque |
|---|---|---|---|---|
| 101 | PLA Preto 1kg | Insumo | R$ 89,90 | 45 |
| 102 | PETG Branco 1kg | Insumo | R$ 95,50 | 30 |
| 103 | Bico Extrusor 0.4mm | Peça | R$ 35,00 | 100 |
| 104 | Mesa PEI Texturizada | Peça | R$ 120,00 | 15 |
| 105 | Resina 8K (Lançamento) | Insumo | R$ 180,00 | 25 |
// 1. Busca os dados brutos no banco via DbPHP
// 2. Encadedeia transformações LINQ com LinqPHP:
$itensTransformados = DB::query("
SELECT p.id_produto, p.nome_produto, c.nome_categoria, p.preco, p.estoque
FROM produtos p
INNER JOIN categorias c ON c.id_categoria = p.id_categoria
")
->linq()
->where(fn($p) => $p['preco'] > 50.00)
->orderByKey('preco', descending: true)
->select([
'id_produto' => 'Código',
'nome_produto' => 'Descrição',
'nome_categoria' => 'Categoria',
'preco' => 'Valor Unitário',
'estoque' => 'Estoque Atual'
])
->take(5)
->toArray();
[
{
"id_produto": 101,
"nome_produto": "PLA Preto 1kg",
"nome_categoria": "Insumo",
"preco": 89.9,
"estoque": 45
},
{
"id_produto": 102,
"nome_produto": "PETG Branco 1kg",
"nome_categoria": "Insumo",
"preco": 95.5,
"estoque": 30
},
{
"id_produto": 103,
"nome_produto": "Bico Extrusor 0.4mm",
"nome_categoria": "Peça",
"preco": 35,
"estoque": 100
},
{
"id_produto": 104,
"nome_produto": "Mesa PEI Texturizada",
"nome_categoria": "Peça",
"preco": 120,
"estoque": 15
},
{
"id_produto": 105,
"nome_produto": "Resina 8K (Lançamento)",
"nome_categoria": "Insumo",
"preco": 180,
"estoque": 25
}
]
id_cliente (INTEGER PK)nome_cliente (TEXT)uf (TEXT)cidade (TEXT)vip (INTEGER 0|1)saldo_credito (REAL)id_produto (INTEGER PK)id_categoria (INTEGER FK)nome_produto (TEXT)preco (REAL)estoque (INTEGER)pedidos.id_pedido (INTEGER PK)pedidos.id_cliente (INTEGER FK)pedidos.status (TEXT)itens_pedido.id_item (INTEGER PK)itens_pedido.qtd (INTEGER)itens_pedido.preco_unitario (REAL)