PHP code example of exegeseit / doctrinequerysearch-helper
1. Go to this page and download the library: Download exegeseit/doctrinequerysearch-helper 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/ */
exegeseit / doctrinequerysearch-helper example snippets
use ExeGeseIT\DoctrineQuerySearchHelper\QueryClauseBuilder;
use ExeGeseIT\DoctrineQuerySearchHelper\SearchFilter;
use App\Entity\User;
use App\Repository\UserRepository;
$qb = $entityManager->getRepository(User::class)->createQueryBuilder('u');
$clauseBuilder = QueryClauseBuilder::getInstance(qb);
$clauseBuilder->setSearchFields[
'id' => 'u.id',
'email' => 'u.email',
'createdAt' => 'u.createdAt',
];
$search = [
SearchFilter::equal('email') => '[email protected] ',
];
$users = $clauseBuilder->getQueryBuilder($search)->getQuery()->getResult();
$search = [
SearchFilter::equal('email') => '[email protected] ',
];
$clauseBuilder->setSearchFields[
'id' => 'u.id',
'email' => 'u.email',
'createdAt' => 'u.createdAt',
];
$search = [
SearchFilter::like('email') => 'john',
];
$clauseBuilder->setSearchFields[
'id' => 'u.id',
'email' => 'u.email',
'createdAt' => 'u.createdAt',
];
$clauseBuilder->setDefaultLikeFields([
'firstName' => 'u.firstName',
'lastName' => 'u.lastName',
]);
$search = [
SearchFilter::filter('firstName') => 'john',
];
$search = [
SearchFilter::like('firstName') => 'john',
];
// src/Repository/MarketRepository.php
use App\Entity\Market;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
use ExeGeseIT\DoctrineQuerySearchHelper\QueryClauseBuilder;
class UserRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Market::class);
}
public function fetchMarketQb(array $search = [], string $paginatorSort = ''): QueryBuilder
{
/**
* Get a QueryBuilder instance and define its SELECT statement
*/
$qb = $this->createQueryBuilder('m')
->innerJoin('m.organization', 'o')
->addSelect('o')
->leftJoin('m.userofmarkets', 'uof', Join::WITH, 'uof.isaccountable = 1')
->addSelect('uof')
->leftJoin('uof.user', 'u')
->addSelect('u');
$qb->addOrderBy('m.name');
/*
* Create a QueryClauseBuilder instance from the QueryBuilder.
*/
$clauseBuilder = QueryClauseBuilder::getInstance($qb);
$clauseBuilder
/*
* Define valid search keys and their entity field mapping.
*/
->setSearchFields([
'idmarket' => 'm.id',
'keymarket' => 'm.key',
'idorganization' => 'o.id',
'keyorganization' => 'o.key',
'idmanager' => 'u.id',
'isprivate' => 'm.isprivate',
'amount' => 'm.amount',
'createdAt' => 'm.createdAt',
'deletedAt' => 'm.deletedAt',
])
/*
* Define default LIKE fields.
*
* If one of these search keys appears in the $search array through
* SearchFilter::filter(), a LIKE filter is implicitly applied.
*/
->setDefaultLikeFields([
'organization' => 'o.name',
'market' => 'm.name',
'name' => 'm.name',
'manager' => "CONCAT(u.firstname, ' ', u.lastname)",
])
;
/*
* Apply the WHERE clause and return the configured QueryBuilder.
*/
return $clauseBuilder->getQueryBuilder($search, $paginatorSort);
}
}
// src/Controller/SomeController.php
use App\Entity\Market;
use Doctrine\ORM\EntityManagerInterface;
use ExeGeseIT\DoctrineQuerySearchHelper\SearchFilter;
class SomeController
{
public function index(EntityManagerInterface $em) : void
{
$search = [
SearchFilter::filter('idorganization') => $idorganization,
SearchFilter::equal('manager') => $manager,
SearchFilter::equal('isprivate') => false,
SearchFilter::or() => [
SearchFilter::equal('isprivate') => true,
SearchFilter::greaterOrEqual('amount') => 5000,
],
];
$markets = $em
->getRepository(Market::class)
->fetchMarketQb($search)
->getQuery()
->useQueryCache(true)
->getResult();
// ...
}
}
SearchFilter::filter(string $searchKey, bool $tokenize = true): string
function isFalsyValue(mixed $value): bool
{
return null === $value || '' === $value || [] === $value || 0 === $value || false === $value;
}
$search = [
SearchFilter::filter('status') => $status,
];
SearchFilter::equal(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::equal('status') => $status,
];
SearchFilter::notEqual(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::notEqual('status') => $status,
];
SearchFilter::like(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::like('name') => $name,
];
SearchFilter::notLike(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::notLike('name') => $name,
];
SearchFilter::likeStrict(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::likeStrict('name') => $name,
];
SearchFilter::notLikeStrict(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::notLikeStrict('name') => $name,
];
SearchFilter::null(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::isNull('deletedAt') => true,
];
SearchFilter::notNull(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::isNotNull('deletedAt') => true,
];
SearchFilter::greater(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::greater('amount') => $amount,
];
SearchFilter::greaterOrEqual(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::greaterOrEqual('amount') => $amount,
];
SearchFilter::lower(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::lower('amount') => $amount,
];
SearchFilter::lowerOrEqual(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::lowerOrEqual('amount') => $amount,
];
$search = [
SearchFilter::greaterOrEqual('createdAt') => $startDate,
SearchFilter::lowerOrEqual('createdAt') => $endDate,
];
$search = [
SearchFilter::greaterOrEqual('amount') => $minAmount,
SearchFilter::lower('amount') => $maxAmount,
];
SearchFilter::andOr(): string
$search = [
SearchFilter::andOr() => [
SearchFilter::equal('status') => $statusDraf,
SearchFilter::equal('status') => $statusPending,
];
SearchFilter::and(): string
$search = [
SearchFilter::and() => [
SearchFilter::greaterOrEqual('amount') => $amountMin,
SearchFilter::lowerOrEqual('amount') => $amountMax, ,
];
SearchFilter::or(): string
$search = [
SearchFilter::or() => [
SearchFilter::equal('isprivate') => true,
SearchFilter::greaterOrEqual('amount') => $amount, ,
];
SearchFilter::equal(string $searchKey, bool $tokenize = true): string
$search = [
SearchFilter::andOr() => [
SearchFilter::equal('status') => $statusDraf,
SearchFilter::equal('status') => $statusPending,
];
sql
WHERE 1 = 1 AND (amount >= :amountMin AND amount <= :amountMax)