1. Go to this page and download the library: Download krzysztof-gzocha/searcher 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/ */
class AgeRangeCriteriaBuilder implements CriteriaBuilderInterface
{
public function buildCriteria(
CriteriaInterface $criteria,
SearchingContextInterface $searchingContext
) {
$searchingContext
->getQueryBuilder()
->andWhere('e.age >= :minimalAge')
->andWhere('e.age <= :maximalAge')
->setParameter('minimalAge', $criteria->getMinimalAge())
->setParameter('maximalAge', $criteria->getMaximalAge());
}
public function allowsCriteria(
CriteriaInterface $criteria
): bool
{
return $criteria instanceof AgeRangeCriteria;
}
/**
* You can skip this method if you will extend from AbstractORMCriteriaBuilder.
*/
public function supportsSearchingContext(
SearchingContextInterface $searchingContext
): bool
{
return $searchingContext instanceof QueryBuilderSearchingContext;
}
}
$builders = new CriteriaBuilderCollection();
$builders->addCriteriaBuilder(new AgeRangeCriteriaBuilder());
$builders->addCriteriaBuilder(/** rest of builders */);
$ageRangeCriteria = new AgeRangeCriteria();
// We have to populate the model before searching
$ageRangeCriteria->setMinimalAge(23);
$ageRangeCriteria->setMaximalAge(29);
$criteria = new CriteriaCollection();
$criteria->addCriteria($ageRangeCriteria);
$criteria->addCriteria(/** rest of criteria */);
$context = new QueryBuilderSearchingContext($queryBuilder);
$searcher = new Searcher($builders, $context);
$searcher->search($criteriaCollection); // Yay, we have our results!
$searcher = new WrappedResultsSearcher(new Searcher($builders, $context));
$results = $searcher->search($criteriaCollection); // instance of ResultCollection
foreach ($results as $result) {
// will work!
}
foreach ($results->getResults() as $result) {
// Since ResultCollection has method getResults() this will also work!
}
$criteria = new ImmutablePaginationAdapter(
new PaginationCriteria($page = 1, $itemsPerPage = 50)
);
// $criteria->setItemsPerPage(250); <- user can try to change it
// $criteria->getItemsPerPage() = 50 <- but he can't actualy do it
// $criteria->getPage() = 1
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.