wyzen-packages/doctrine-simple-query-builder

Doctrine的简易查询构建器

v3.2.0 2024-03-19 11:49 UTC

This package is auto-updated.

Last update: 2024-09-19 11:46:00 UTC


README

使用Doctrine构建查询的库,使查询更加简单。

最低使用PHP 8.1和Doctrine 3.4版本

版本

  • 使用最低PHP 8.1和Doctrine 3.4版本
  • 添加debugSql()函数以显示查询及其参数
  • 修复addCustomFilter函数

简单声明

use Wyzen\Doctrine\SimpleQueryBuilder\SimpleQueryBuilder;

$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
$sqb = new SimpleQueryBuilder($conn);

运算符

函数运算符列表

use Wyzen\Doctrine\SimpleQueryBuilder\SimpleQueryBuilderOperator
  • EQ
  • LT
  • LE
  • GT
  • GE
  • NE
  • IN
  • NOTIN
  • ISNULL
  • ISNOTNULL
  • LIKE
  • NOTLIKE
  • BETWEEN
  • NOTBETWEEN

setTable

$sqb->setTable('usersProfil');
// select sur 'usersProfil'

$sqb->setTable('usersProfilDto');
// select sur 'usersProfilDto'

$sqb->setTable('v_users');
// select sur 'v_users'

$sqb->setTable('usersProfilRepository');
// select sur 'users_profil'

$sqb->setTable('usersProfilDtoRepository');
// select sur 'v_dto_users_profil'

过滤器

$sqb = new SimpleQueryBuilder($conn);
$sqb->setTable('users');

$sqb->addFilter('name', 'admin', SimpleQueryBuilderOperator::EQ); // par défaut EQ
$sqb->addGroup('name');
$sqb->addGroups(['name', 'email']);
$sqb->addOrder('name', 'desc');

// same
$sqb->addFilter('name', ['admin', 'guest', 'other'], SimpleQueryBuilderOperator::IN);
$sqb->addFilter('name', ['admin', 'guest', 'other'], SimpleQueryBuilderOperator::EQ);
$sqb->addFilter('name', ['admin', 'guest', 'other']);

$sqb->addFilter('name', ['admin', 'guest', 'other'], SimpleQueryBuilderOperator::NOTIN);
$sqb->addFilter('name', ['admin', 'guest', 'other'], SimpleQueryBuilderOperator::NE);

$sqb->addFilter('name', SimpleQueryBuilderOperator::ISNULL);

$sqb->addFilter('id', [1,10], SimpleQueryBuilderOperator::BETWEEN);

$sqb->addFilter('name', '%admin%', SimpleQueryBuilderOperator::LIKE);

自定义过滤器

$sqb = new SimpleQueryBuilder($conn);
$sqb->setTable('users');

$sqb->addCustomFilter('users.user_id=30 or users.user_id=34');
// OR
$sqb->addCustomFilter('users.user_id', 33, SimpleQueryBuilderOperator::GT);

查询

$count = $sqb->executeRowCount('pk_table'); // count(distinct pk_table)
$count = $sqb->executeRowCount(); // count(*)


$rows = $sqb->fetchAll(); // return array

$stmt = $sqb->execute(); // return ResultStatement|int
$rows = $stmt->fetchAll();

分页

$limit = 10;
$pagination = new Pagination($limit);

$pagination->clear();
$pagination->isActive(); // Test pagination active

// Getters
$pagination->getLimit(); // Get the limit
$pagination->getPage(); // Get the current page
$pagination->getPages(); // Get the total of pages
$pagination->getResults(); // Get the total of rows (without limit)

// Setters
$pagination->setLimit(10); // Set the limit
$pagination->setPage(1); // Set the current page
$pagination->setPages(4); // Set the total of pages
$pagination->setResults(132); // Set the total of rows (without limit)

$sqb
    ->setPagination($pagination);
    ->setTable('users')
    ->addFilter('email', '%.com%', SimpleQueryBuilderOperator::LIKE)
    ->addOrder('name');
$rows = $sqb->fetchAll();
$sqb->getWhere();
$sqb->getOrderby();
$sqb->getGroupby();

$pagination = $sqb->getPagination();

// To change page
$pagination->setPage(2);
$sqb->setPagination($pagination);
$rows = $sqb->fetchAll();

自定义类

<?php
declare(strict_types=1);

use Doctrine\DBAL\Connection;
use Wyzen\Doctrine\SimpleQueryBuilder\SimpleQueryBuilderAbstract;

/**
* Déclaration de la classe
*/
class SimpleQueryBuilderCustom extends SimpleQueryBuilderAbstract
{
    // Vos propriétés
    const LIMIT = 10;

    /** @inheritDoc */
    function __construct(Connection $conn, ?String $className = null)
    {
        parent::__construct($conn, $className);
    }

    /**
    * Vos fonctions
    */
}