Skip to content

Commit dab7077

Browse files
committed
option for raw arguments
'use_raw_arguments' = 1 this way, we can make query with aggregate function(s), datetime functions, etc.
1 parent 58151c7 commit dab7077

File tree

4 files changed

+34
-13
lines changed

4 files changed

+34
-13
lines changed

src/JsonQuery.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,18 @@ public function search(): void
6565
*/
6666
protected function appendParameterQueries(): void
6767
{
68+
// enable raw arguments
69+
// will use raw method rather then basic ones, in group_by and returns
70+
// $builder->selectRaw, $builder->groupByRaw
71+
$rawArguments = boolval($this->input['use_raw_arguments'] ?? false) ?? false;
72+
6873
foreach ($this->registeredParameters as $requestParameter) {
6974
if (!$this->parameterExists($requestParameter)) {
7075
// TODO: append config query?
7176
continue;
7277
}
7378

74-
$this->instantiateRequestParameter($requestParameter)
79+
$this->instantiateRequestParameter($requestParameter, $rawArguments)
7580
->run();
7681
}
7782
}
@@ -97,20 +102,20 @@ protected function parameterExists(string $requestParameter): bool
97102
}
98103

99104
/**
100-
* @param $requestParameter
105+
* @param string $requestParameter
106+
* @param bool|null $rawArguments
101107
* @return AbstractParameter
102-
*
103108
* @throws JsonQueryBuilderException
104109
*/
105-
protected function instantiateRequestParameter(string $requestParameter): AbstractParameter
110+
protected function instantiateRequestParameter(string $requestParameter, ?bool $rawArguments = false): AbstractParameter
106111
{
107112
if (!is_subclass_of($requestParameter, AbstractParameter::class)) {
108113
throw new JsonQueryBuilderException("$requestParameter must extend " . AbstractParameter::class);
109114
}
110115

111116
$input = $this->wrapInput($requestParameter::getParameterName());
112117

113-
return new $requestParameter($input, $this->builder, $this->modelConfig);
118+
return new $requestParameter($input, $this->builder, $this->modelConfig, $rawArguments);
114119
}
115120

116121
/**

src/RequestParameters/AbstractParameter.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,21 @@ abstract class AbstractParameter
1313
public Builder $builder;
1414
public ModelConfig $modelConfig;
1515
protected array $arguments;
16+
protected bool $rawArguments;
1617

1718
/**
18-
* AbstractParameter constructor.
19-
*
20-
* @param array $arguments
21-
* @param Builder $builder
22-
* @param ModelConfig $modelConfig
19+
* AbstractParameter constructor
20+
* @param array $arguments
21+
* @param Builder $builder
22+
* @param ModelConfig $modelConfig
23+
* @param bool|null $rawArguents
2324
*/
24-
public function __construct(array $arguments, Builder $builder, ModelConfig $modelConfig)
25+
public function __construct(array $arguments, Builder $builder, ModelConfig $modelConfig, ?bool $rawArguments = false)
2526
{
2627
$this->arguments = $arguments;
2728
$this->builder = $builder;
2829
$this->modelConfig = $modelConfig;
30+
$this->rawArguments = $rawArguments;
2931
}
3032

3133
/**

src/RequestParameters/GroupByParameter.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ public static function getParameterName(): string
1313

1414
protected function appendQuery(): void
1515
{
16-
$this->builder->groupBy($this->arguments);
16+
if (!$this->rawArguments) {
17+
$this->builder->groupBy($this->arguments);
18+
}
19+
else {
20+
foreach($this->arguments as $arg) {
21+
$this->builder->groupByRaw($arg);
22+
}
23+
}
1724
}
1825
}

src/RequestParameters/ReturnsParameter.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ public static function getParameterName(): string
1313

1414
protected function appendQuery(): void
1515
{
16-
$this->builder->addSelect($this->arguments);
16+
if (!$this->rawArguments) {
17+
$this->builder->addSelect($this->arguments);
18+
}
19+
else {
20+
foreach($this->arguments as $arg) {
21+
$this->builder->selectRaw( $arg );
22+
}
23+
}
1724
}
1825
}

0 commit comments

Comments
 (0)