Skip to content
Snippets Groups Projects
Commit ae723d87 authored by Pavel's avatar Pavel
Browse files

nested filter collections, logic operator

parent ae29226d
No related branches found
No related tags found
No related merge requests found
......@@ -2,23 +2,23 @@
namespace IQDEV\Search;
use IQDEV\Search\Filter\FilterCollection;
use IQDEV\Search\Filter\FilterGroupCollection;
use IQDEV\Search\Order\OrderCollection;
final class Criteria
{
private FilterCollection $filters;
private FilterGroupCollection $filters;
private OrderCollection $sorting;
private Pagination $pagination;
public function __construct()
{
$this->filters = new FilterCollection();
$this->filters = new FilterGroupCollection();
$this->sorting = new OrderCollection();
$this->pagination = new Pagination();
}
public function filters(): FilterCollection
public function filters(): FilterGroupCollection
{
return $this->filters;
}
......
......@@ -6,6 +6,14 @@ use Ramsey\Collection\AbstractCollection;
class FilterCollection extends AbstractCollection
{
/** @var LogicOperator Тип логической операции для коллекции */
protected LogicOperator $type;
public function __construct(array $data = [])
{
parent::__construct($data);
$this->type = new LogicOperator(LogicOperator::AND);
}
/**
* @inheritDoc
......@@ -14,4 +22,18 @@ class FilterCollection extends AbstractCollection
{
return Filter::class;
}
/**
* Установка типа логической операции
*
* @param LogicOperator $type
*
* @return $this
*/
public function setLogicalType(LogicOperator $type): self
{
$this->type = $type;
return $this;
}
}
<?php
namespace IQDEV\Search\Filter;
use Ramsey\Collection\AbstractCollection;
class FilterGroupCollection extends AbstractCollection
{
/** @var LogicOperator Тип логической операции для коллекции */
protected LogicOperator $type;
public function __construct(array $data = [])
{
parent::__construct($data);
$this->type = new LogicOperator(LogicOperator::AND);
}
/**
* @inheritDoc
*/
public function getType(): string
{
return FilterCollection::class;
}
/**
* Установка типа логической операции
*
* @param LogicOperator $type
*
* @return $this
*/
public function setLogicalType(LogicOperator $type): self
{
$this->type = $type;
return $this;
}
}
<?php
namespace IQDEV\Search\Filter;
final class LogicOperator
{
public const AND = 'AND';
public const OR = 'OR';
private string $operator;
public function __construct(string $operator)
{
if (!in_array($operator, self::toArray(), true)) {
throw new \InvalidArgumentException(sprintf('invalid operator %s', $operator));
}
$this->operator = $operator;
}
public function value(): string
{
return $this->operator;
}
/**
* @return string[]
*/
public static function toArray(): array
{
return [
self::AND,
self::OR
];
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment