Skip to content

Commit 0644915

Browse files
committed
FIlter API enhancements
1 parent 34eaefe commit 0644915

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

src/DataMapper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ final public function read($record = null, string $alias = null, $trash = false,
125125
->source($this->getCollection())
126126
->relation($this->parseReadRelations($this->fields))
127127
->fields($fields)
128-
->where($filters)// TODO: needs review
128+
->where($filters) // TODO: needs review
129129
->recover($values);
130130

131131
$this->reset();

src/Resource/ModelParser.php

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Simples\Persistence\Field;
1212
use Simples\Persistence\Filter;
1313
use Simples\Persistence\Fusion;
14+
use function is_array;
1415

1516
/**
1617
* Class ModelParser
@@ -29,20 +30,39 @@ protected function parseFilterFields(array $data = []): array
2930
{
3031
$filters = [];
3132
foreach ($data as $name => $value) {
32-
if (is_array($value) && isset($value['filter'])) {
33-
$value['filter'] = $this->parseFilterFields($value['filter']);
34-
$filters[] = $value;
33+
if (is_array($value) && $name === '__filter__') {
34+
$filters = $this->parseFilterRules($filters, $value);
3535
continue;
3636
}
3737
if (!$this->has($name)) {
3838
$class = static::class;
39-
throw new SimplesRunTimeError("There is no property `{$name}` in `{$class}`");
39+
$json = JSON::encode($data);
40+
throw new SimplesRunTimeError(
41+
"There is no property `{$name}` in `{$class}` parsing {$json}"
42+
);
4043
}
4144
$filters[] = Filter::create($this->get($name), $value);
4245
}
4346
return $filters;
4447
}
4548

49+
/**
50+
* @param array $filters
51+
* @param array $rules
52+
* @return array
53+
*/
54+
protected function parseFilterRules(array $filters, array $rules): array
55+
{
56+
foreach ($rules as $rule) {
57+
if (!isset($rule['filter']) && !is_array($rule['filter'])) {
58+
continue;
59+
}
60+
$rule['filter'] = $this->parseFilterFields($rule['filter']);
61+
$filters[] = $rule;
62+
}
63+
return $filters;
64+
}
65+
4666
/**
4767
* Parse the values of the fields
4868
*

0 commit comments

Comments
 (0)