FluentPDO é um construtor de consultas PHP SQL usando PDO. É uma biblioteca rápida e leve com um construtor de junção inteligente, que cria automaticamente junções de tabelas para você.
Interface fácil para criar consultas robustas
Suporta qualquer banco de dados compatível com PDO
Capacidade de construir consultas SELECT, INSERT, UPDATE e DELETE complexas com pouco código
Dicas de tipo para métodos mágicos com conclusão de código em IDEs inteligentes
A versão estável do FluentPDO e mantida ativamente. Suporta oficialmente PHP 7.3 a PHP 8.0, mas pode funcionar com versões anteriores do PHP 7.
A versão legada do FluentPDO. Ele não é mais suportado e não será mantido ou atualizado. Esta versão funciona com PHP 5.4 a 7.1.
Esta versão é uma reescrita completa do Fluent desde o início. Sua principal vantagem é um uso significativamente menor de memória e um desempenho muito maior na construção de consultas. Ele também impõe algumas restrições adicionais para facilitar a leitura e a manutenção das consultas. A documentação também tem sido uma solicitação muito comum, e a versão 3 está sendo totalmente documentada junto com o desenvolvimento. Detalhes e métricas serão publicados assim que estiverem disponíveis.
Sitepoint - Primeiros passos com FluentPDO
A forma preferida de instalar o FluentPDO é via compositor.
Adicione a seguinte linha ao seu arquivo composer.json
:
"require": { ... "envms/fluentpdo": "^2.2.0" }
atualize suas dependências com composer update
e pronto!
Se você preferir não usar o compositor, baixe a versão mais recente, crie o diretório Envms/FluentPDO
no diretório da sua biblioteca e coloque este repositório nele. Por fim, adicione:
requer '[lib-dir]/Envms/FluentPDO/src/Query.php';
para o topo do seu aplicativo. Nota: Você precisará de um autoloader para usar o FluentPDO sem alterar seu código-fonte.
Crie uma nova instância do PDO e passe-a para o FluentPDO:
$pdo = new PDO('mysql:dbname=fluentdb', 'user', 'password');$fluent = new EnvmsFluentPDOQuery($pdo);
Então, criar consultas é rápido e fácil:
$consulta = $fluente->from('comentário') ->where('article.published_at > ?', $data) ->orderBy('publicado_em DESC') ->limite(5);
que construiria a consulta abaixo:
SELECIONE comentário.*FROM comentárioLEFT JOIN artigo ON artigo.id = comentário.article_idWHERE artigo.published_at > ?ORDER BY artigo.published_at DESCLIMIT 5
Para obter dados do select, tudo o que fazemos é percorrer o array retornado:
foreach ($query as $row) {echo "$row['title']n"; }
Vamos começar com uma junção tradicional, abaixo:
$query = $fluent->from('artigo') ->leftJoin('usuário ON user.id = artigo.user_id') ->select('usuário.nome');
Isso é bastante detalhado e não muito inteligente. Se suas tabelas usam nomes de chave primária e estrangeira adequados, você pode abreviar o acima para:
$query = $fluent->from('artigo') ->leftJoin('usuário') ->select('usuário.nome');
Isso é melhor, mas não é o ideal. No entanto, seria ainda mais fácil não escrever nenhuma junção :
$consulta = $fluente->from('artigo') ->select('usuário.nome');
Incrível, certo? O FluentPDO é capaz de construir a junção para você, acrescentando o nome da tabela estrangeira à coluna solicitada.
Todos os três trechos acima criarão exatamente a mesma consulta:
SELECIONE artigo.*, nome do usuário FROM artigo LEFT JOIN usuário ON user.id = artigo.user_id
Por fim, é sempre uma boa ideia liberar recursos assim que eles concluírem suas funções:
$fluente->fechar();
$query = $fluent->from('article')->where('id', 1)->fetch();$query = $fluent->from('user', 1)->fetch(); // versão mais curta se selecionar uma linha por chave primária
$valores = array('title' => 'artigo 1', 'content' => 'conteúdo 1');$query = $fluent->insertInto('article')->values($values)->execute( );$query = $fluent->insertInto('artigo', $valores)->executar(); //versão mais curta
$set = array('published_at' => new FluentLiteral('NOW()'));$query = $fluent->update('article')->set($set)->where('id', 1 )->executar();$query = $fluent->update('artigo', $set, 1)->executar(); // versão mais curta se estiver atualizando uma linha por chave primária
$query = $fluent->deleteFrom('article')->where('id', 1)->execute();$query = $fluent->deleteFrom('article', 1)->execute(); // versão mais curta se for deletar uma linha por chave primária
Nota : as consultas INSERT, UPDATE e DELETE só serão executadas após você chamar ->execute()
Gratuito para uso comercial e não comercial sob as licenças Apache 2.0 ou GPL 2.0.