|
- <?php
-
- namespace App\Repositories;
-
- use Illuminate\Database\Query\Builder;
- use Illuminate\Support\Arr;
-
- abstract class BaseRepository
- {
-
- const ORDER_ASC = "asc";
- const ORDER_DESC = "desc";
-
- const CONDITION_SORT_TARGET = "sort";
- const CONDITION_SORT_ORDER = "order";
-
- const CONDITION_LIMIT = "limit";
- const MAX_LIMIT = 500;
-
-
- protected function sort(Builder $query, array $condition)
- {
- $target = data_get($condition, self::CONDITION_SORT_TARGET);
- $order = data_get($condition, self::CONDITION_SORT_ORDER);
- if ($target === null || $order === null) {
- return;
- }
-
- if ($order === static::ORDER_ASC) {
- $query->orderBy($target);
- }
- if ($order === static::ORDER_DESC) {
- $query->orderByDesc($target);
- }
- }
-
- protected function limit(Builder $query, array $condition, ?int $default = null)
- {
-
-
- $limit = data_get($condition, self::CONDITION_LIMIT, $default) ?? $default ?? static::MAX_LIMIT;
-
- $limit = min($limit, self::MAX_LIMIT);
-
- $query->limit($limit);
- }
-
- protected function where(Builder $query, array $condition, string $conditionKey, string|null $columnName = null): bool
- {
-
- $ret = data_get($condition, $conditionKey);
- if ($ret !== null) {
- $query->where($columnName ?? $conditionKey, $ret);
- return true;
- } else {
- return false;
- }
- }
- protected function whereIn(Builder $query, array $condition, string $conditionKey, string|null $columnName = null): bool
- {
-
- $ret = data_get($condition, $conditionKey);
- if ($ret !== null && is_array($ret)) {
- $query->whereIn($columnName ?? $conditionKey, $ret);
- return true;
- } else {
- return false;
- }
- }
-
- protected function makeColumnName(array $targets, ?string $as = null): string
- {
- $as = $as ? " as {$as}" : "";
- return implode('.', $targets) . $as;
- }
- protected function makeColumnNameForSelect(array $targets, ?string $as = null): string
- {
- $as = $as ? " as {$as}" : " as " . Arr::last($targets);
- return implode('.', $targets) . $as;
- }
- }
|