Skip to content

Commit 497f345

Browse files
committed
dev
1 parent 639c65f commit 497f345

File tree

7 files changed

+149
-111
lines changed

7 files changed

+149
-111
lines changed

src/condition/ConditionDbParser.php

Lines changed: 102 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,61 +7,16 @@
77
class ConditionDbParser
88
{
99

10+
/**
11+
* @param QueryBuilder $queryBuilder
12+
* @param Condition|null $condition
13+
*/
1014
public function parse(QueryBuilder $queryBuilder, Condition $condition = null)
1115
{
1216
if ($condition === null) {
1317
return;
1418
}
15-
foreach ($condition->getConditions() as $cond) {
16-
if (\is_array($cond)) {
17-
$cond = \array_values($cond);
18-
$type = \array_shift($cond);
19-
switch ($type) {
20-
case Condition::EQUALS:
21-
$queryBuilder->andWhere("{$cond[0]} = " . $queryBuilder->createNamedParameter($cond[1]));
22-
break;
23-
case Condition::NOT_EQUALS:
24-
$queryBuilder->andWhere("{$cond[0]} <> " . $queryBuilder->createNamedParameter($cond[1]));
25-
break;
26-
case Condition::LESS_THAN:
27-
$queryBuilder->andWhere("{$cond[0]} < " . $queryBuilder->createNamedParameter($cond[1]));
28-
break;
29-
case Condition::GREATER_THAN:
30-
$queryBuilder->andWhere("{$cond[0]} > " . $queryBuilder->createNamedParameter($cond[1]));
31-
break;
32-
case Condition::LESS_OR_EQUALS:
33-
$queryBuilder->andWhere("{$cond[0]} <= " . $queryBuilder->createNamedParameter($cond[1]));
34-
break;
35-
case Condition::GREATER_OR_EQUALS:
36-
$queryBuilder->andWhere("{$cond[0]} >= " . $queryBuilder->createNamedParameter($cond[1]));
37-
break;
38-
case Condition::BETWEEN:
39-
$queryBuilder->andWhere("{$cond[0]} BETWEEN " . $queryBuilder->createNamedParameter($cond[1])
40-
. ' AND ' . $queryBuilder->createNamedParameter($cond[2]));
41-
break;
42-
case Condition::LIKE:
43-
$value = $cond[2] ? '%' : '';
44-
$value .= $cond[1];
45-
$value .= $cond[3] ? '%' : '';
46-
$queryBuilder->andWhere("{$cond[0]} LIKE " . $queryBuilder->createNamedParameter($value));
47-
break;
48-
case Condition::IN:
49-
if ($cond[1]) {
50-
$isNumeric = $cond[2];
51-
$sql = '';
52-
/** @var array $values */
53-
$values = $cond[1];
54-
foreach ($values as $v) {
55-
$sql .= ($isNumeric ? (float)$v : $queryBuilder->createNamedParameter($v)) . ',';
56-
}
57-
$queryBuilder->andWhere("{$cond[0]} IN (" . \rtrim($sql, ',') . ')');
58-
} else {
59-
$queryBuilder->andWhere('1 = 2'); // IN empty array is always false
60-
}
61-
break;
62-
}
63-
}
64-
}
19+
$this->parseConditions($queryBuilder, $condition);
6520

6621
foreach ($condition->getSort() as $field => $direction) {
6722
$queryBuilder->orderBy($field, $direction === \SORT_DESC ? 'desc' : 'asc');
@@ -75,4 +30,101 @@ public function parse(QueryBuilder $queryBuilder, Condition $condition = null)
7530
$queryBuilder->setMaxResults($limit);
7631
}
7732
}
33+
34+
/**
35+
* @param QueryBuilder $queryBuilder
36+
* @param Condition $condition
37+
*/
38+
protected function parseConditions(QueryBuilder $queryBuilder, Condition $condition)
39+
{
40+
foreach ($condition->getConditions() as $cond) {
41+
if (!\is_array($cond)) {
42+
continue;
43+
}
44+
45+
$cond = \array_values($cond);
46+
$type = \array_shift($cond);
47+
switch ($type) {
48+
case Condition::EQUALS:
49+
$this->parseSimpleCondition('=', $queryBuilder, $cond);
50+
break;
51+
case Condition::NOT_EQUALS:
52+
$this->parseSimpleCondition('<>', $queryBuilder, $cond);
53+
break;
54+
case Condition::LESS_THAN:
55+
$this->parseSimpleCondition('<', $queryBuilder, $cond);
56+
break;
57+
case Condition::GREATER_THAN:
58+
$this->parseSimpleCondition('>', $queryBuilder, $cond);
59+
break;
60+
case Condition::LESS_OR_EQUALS:
61+
$this->parseSimpleCondition('<=', $queryBuilder, $cond);
62+
break;
63+
case Condition::GREATER_OR_EQUALS:
64+
$this->parseSimpleCondition('>=', $queryBuilder, $cond);
65+
break;
66+
case Condition::BETWEEN:
67+
$this->parseBetweenCondition($queryBuilder, $cond);
68+
break;
69+
case Condition::LIKE:
70+
$this->parseLikeCondition($queryBuilder, $cond);
71+
break;
72+
case Condition::IN:
73+
$this->parseInCondition($queryBuilder, $cond);
74+
break;
75+
}
76+
}
77+
}
78+
79+
/**
80+
* @param QueryBuilder $queryBuilder
81+
* @param $cond
82+
*/
83+
protected function parseLikeCondition(QueryBuilder $queryBuilder, $cond)
84+
{
85+
$value = $cond[2] ? '%' : '';
86+
$value .= $cond[1];
87+
$value .= $cond[3] ? '%' : '';
88+
$queryBuilder->andWhere("{$cond[0]} LIKE " . $queryBuilder->createNamedParameter($value));
89+
}
90+
91+
/**
92+
* @param QueryBuilder $queryBuilder
93+
* @param $cond
94+
*/
95+
protected function parseInCondition(QueryBuilder $queryBuilder, $cond)
96+
{
97+
if ($cond[1]) {
98+
$isNumeric = $cond[2];
99+
$sql = '';
100+
/** @var array $values */
101+
$values = $cond[1];
102+
foreach ($values as $v) {
103+
$sql .= ($isNumeric ? (float)$v : $queryBuilder->createNamedParameter($v)) . ',';
104+
}
105+
$queryBuilder->andWhere("{$cond[0]} IN (" . \rtrim($sql, ',') . ')');
106+
} else {
107+
$queryBuilder->andWhere('1 = 2'); // IN empty array is always false
108+
}
109+
}
110+
111+
/**
112+
* @param QueryBuilder $queryBuilder
113+
* @param $cond
114+
*/
115+
protected function parseBetweenCondition(QueryBuilder $queryBuilder, $cond)
116+
{
117+
$queryBuilder->andWhere("{$cond[0]} BETWEEN " . $queryBuilder->createNamedParameter($cond[1])
118+
. ' AND ' . $queryBuilder->createNamedParameter($cond[2]));
119+
}
120+
121+
/**
122+
* @param string $exp
123+
* @param QueryBuilder $queryBuilder
124+
* @param $cond
125+
*/
126+
protected function parseSimpleCondition(string $exp, QueryBuilder $queryBuilder, $cond)
127+
{
128+
$queryBuilder->andWhere("{$cond[0]} $exp " . $queryBuilder->createNamedParameter($cond[1]));
129+
}
78130
}

src/entity/AbstractEntityEntityRepositoryDb.php renamed to src/entity/AbstractEntityRepositoryDb.php

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use WebComplete\core\utils\hydrator\HydratorInterface;
1010
use WebComplete\core\condition\Condition;
1111

12-
abstract class AbstractEntityEntityRepositoryDb extends AbstractEntityRepository
12+
abstract class AbstractEntityRepositoryDb extends AbstractEntityRepository
1313
{
1414
const SERIALIZE_STRATEGY_JSON = 1;
1515
const SERIALIZE_STRATEGY_PHP = 2;
@@ -58,15 +58,7 @@ public function transaction(\Closure $closure)
5858
*/
5959
public function findById($id)
6060
{
61-
$result = null;
62-
$select = $this->selectQuery()->where('t1 = :id')->setParameter(':id', $id);
63-
if ($row = $select->execute()->fetch()) {
64-
$this->unserializeFields($row);
65-
/** @var AbstractEntity $result */
66-
$result = $this->factory->createFromData($row);
67-
}
68-
69-
return $result;
61+
return $this->findOne(new Condition(['t1.id' => $id]));
7062
}
7163

7264
/**

src/utils/container/ContainerAdapter.php

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
class ContainerAdapter implements ContainerInterface
66
{
7-
87
private $container;
98

109
/**
@@ -30,13 +29,7 @@ public function setContainer($container)
3029
*/
3130
public function get($id)
3231
{
33-
if (!$this->container) {
34-
throw new ContainerException('Container not injected');
35-
}
36-
if (\method_exists($this->container, 'get')) {
37-
return $this->container->get($id);
38-
}
39-
throw new ContainerException('Container method not found: get');
32+
return $this->call('get', $id);
4033
}
4134

4235
/**
@@ -46,13 +39,7 @@ public function get($id)
4639
*/
4740
public function has($id)
4841
{
49-
if (!$this->container) {
50-
throw new ContainerException('Container not injected');
51-
}
52-
if (\method_exists($this->container, 'has')) {
53-
return $this->container->has($id);
54-
}
55-
throw new ContainerException('Container method not found: has');
42+
return $this->call('has', $id);
5643
}
5744

5845
/**
@@ -61,14 +48,25 @@ public function has($id)
6148
* @throws ContainerException
6249
*/
6350
public function make($id)
51+
{
52+
return $this->call('make', $id);
53+
}
54+
55+
/**
56+
* @param $method
57+
* @param $id
58+
*
59+
* @return mixed
60+
* @throws ContainerException
61+
*/
62+
protected function call($method, $id)
6463
{
6564
if (!$this->container) {
6665
throw new ContainerException('Container not injected');
6766
}
68-
if (\method_exists($this->container, 'make')) {
69-
return $this->container->make($id);
67+
if (\method_exists($this->container, $method)) {
68+
return $this->container->$method($id);
7069
}
71-
throw new ContainerException('Container method not found: make');
70+
throw new ContainerException('Container method not found: ' . $method);
7271
}
73-
74-
}
72+
}

src/utils/hydrator/Hydrator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function hydrate(array $data, $objectOrClass, array $map = null)
2828
$object = $reflection->newInstanceWithoutConstructor();
2929
}
3030

31-
if ($map === null || !$map) {
31+
if (!\is_array($map)) {
3232
$map = \array_keys($data);
3333
$map = \array_combine($map, $map);
3434
}
@@ -59,7 +59,7 @@ public function extract($object, array $map = null): array
5959
$className = \get_class($object);
6060
$reflection = $this->getReflection($className);
6161

62-
if ($map === null || !$map) {
62+
if (!\is_array($map)) {
6363
$propertyList = $this->getReflectionPropertyList($className);
6464
$map = \array_combine($propertyList, $propertyList);
6565
}

src/utils/traits/TraitErrors.php

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,53 +7,50 @@
77
*/
88
trait TraitErrors
99
{
10-
11-
protected $_errors = [];
10+
protected $errors = [];
1211

1312
/**
1413
* @param string $code
1514
* @param $error
1615
*/
1716
public function addError($code, $error)
1817
{
19-
if(!isset($this->_errors[$code])) {
20-
$this->_errors[$code] = [];
18+
if (!isset($this->errors[$code])) {
19+
$this->errors[$code] = [];
2120
}
22-
$this->_errors[$code][] = $error;
21+
$this->errors[$code][] = $error;
2322
}
2423

2524
/**
2625
* @param null|string $code
2726
* @return bool
2827
*/
29-
public function hasErrors($code = null)
28+
public function hasErrors($code = null): bool
3029
{
31-
return count($this->getErrors($code)) > 0;
30+
return \count($this->getErrors($code)) > 0;
3231
}
3332

3433
/**
3534
* @param null|string $code
3635
* @return array
3736
*/
38-
public function getErrors($code = null)
37+
public function getErrors($code = null): array
3938
{
40-
if($code) {
41-
return isset($this->_errors[$code])
42-
? $this->_errors[$code]
43-
: [];
39+
if ($code !== null) {
40+
return $this->errors[$code] ?? [];
4441
}
45-
return $this->_errors;
42+
return $this->errors;
4643
}
4744

4845
/**
4946
* @return array
5047
*/
51-
public function getFirstErrors()
48+
public function getFirstErrors(): array
5249
{
5350
$result = [];
5451
foreach ($this->getErrors() as $field => $errors) {
55-
if($errors) {
56-
$result[$field] = reset($errors);
52+
if ($errors) {
53+
$result[$field] = \reset($errors);
5754
}
5855
}
5956
return $result;
@@ -64,12 +61,10 @@ public function getFirstErrors()
6461
*/
6562
public function resetErrors($code = null)
6663
{
67-
if($code) {
68-
unset($this->_errors[$code]);
69-
}
70-
else {
71-
$this->_errors = [];
64+
if ($code !== null) {
65+
unset($this->errors[$code]);
66+
} else {
67+
$this->errors = [];
7268
}
7369
}
74-
75-
}
70+
}

0 commit comments

Comments
 (0)