Files
exchange-2.0/app/Classes/General/Eloquent/AbstractGetRecord.php
T
Dillon Ngo f8230990f4 Revert "Merge branch 'revert-b9668bb6' into 'master'"
This reverts merge request !157
2024-02-11 10:28:05 +00:00

85 lines
1.9 KiB
PHP

<?php
namespace App\Classes\General\Eloquent;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;
abstract class AbstractGetRecord
{
/** @var array */
private const DECORATION_FILTERS = ['per_page', 'order_by'];
/** @var Collection */
private $filters;
/**
* @return Collection
*/
private function getQueryFilters(){
return $this->filters->except(self::DECORATION_FILTERS);
}
/**
* @return Collection
*/
public function getDecorationFilters(){
return $this->filters->only(self::DECORATION_FILTERS);
}
// /**
// * @param null|string $json
// * @return array
// */
// public function deserializeFilters(?string $json): array {
// return $json !== null ? collect(json_decode($json))->toArray() : [];
// }
/**
* @param null|string $param
* @return array
*/
public function deserializeFilters($param): array {
if(gettype($param) == "array"){
$json = implode(',', $param);
}
else{
$json = $param;
}
return $json !== null ? collect(json_decode($json))->toArray() : [];
}
/**
* @return Builder
*/
private function applyFiltersToQuery(): Builder
{
return (new ApplyFiltersToQuery())->execute($this->getRepository(), $this->getQueryFilters()->toArray());
}
/**
* @param array $filters
* @return mixed
*/
public function handler(array $filters, array $params = []){
$this->filters = collect($filters);
return $this->getResults($this->applyFiltersToQuery(), $params);
}
/**
* @return Builder
*/
abstract function getRepository(): Builder;
/**
* @param Builder $query
* @return mixed
*/
abstract function getResults(Builder $query, array $params = []);
}