| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace App\Services\common;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- Class QueryService
- {
- /**
- * parameter - query(sql) - special column description
- *
- * @param $queryParam ($request->all())
- * @param object $query
- * @param array $columnQueryRules
- * @param string $tableName
- * @return object
- */
- public function queryCondition($queryParam,$query,array $columnQueryRules,$tableName = null)
- {
- if ($tableName) $tableName .= ".";
- foreach ($queryParam as $param => $value){
- if ($param === 'paginate' || $param === 'page')continue;
- if (!$value || isset($columnQueryRules[$param]))continue;
- $query = $query->where($tableName.$param,$value);
- }
- //rules: alias timeLimit startDate endDate like multi
- foreach ($columnQueryRules as $param => $rules){
- $queryCondition=$queryParam[$param]??null;
- if (!$queryCondition)continue;
- $isExecute = true;
- $column = $param;
- foreach ($rules as $rule => $value){
- if ($rule === 'alias'){
- $column = $value;
- $isExecute = false;
- }
- if ($rule === 'timeLimit'){
- $today=Carbon::now()->subDays($value);
- $queryTemp=clone $query;
- $queryTemp=$queryTemp->where($tableName.$column,'like','%'.$queryCondition.'%')
- ->where($tableName.'created_at','>',$today);
- if($queryTemp->count()==0 || $queryTemp->first()[$column]==$queryCondition){
- $query=$query->where($tableName.$column,$queryCondition);
- }else{
- $query=$query->where($tableName.$column,'like','%'.$queryCondition.'%')
- ->where($tableName.'created_at','>',$today);
- }
- $isExecute = true;
- }
- if ($rule === 'startDate'){
- $startDate = $queryCondition.$value;
- $query = $query->where($tableName.$column,'>=',$startDate);
- $isExecute = true;
- }
- if ($rule === 'endDate'){
- $endDate = $queryCondition.$value;
- $query = $query->where($tableName.$column,'<=',$endDate);
- $isExecute = true;
- }
- if ($rule === 'like'){
- $query = $query->where($tableName.$column,'like',$value.$queryCondition.$value);
- $isExecute = true;
- }
- if ($rule === 'multi'){
- $query = $query->whereIn($tableName.$column,explode($value,$queryCondition));
- $isExecute = true;
- }
- }
- if (!$isExecute) $query = $query->where($tableName.$column,$queryCondition);
- }
- return $query;
- }
- /**
- * parameter - query(sql) - special column description
- *
- * @param Request $request
- * @param object $query
- * @param array $columnQueryRules
- * @param string $tableName
- * @return object
- */
- public function query(Request $request,$query,array $columnQueryRules,$tableName = null)
- {
- if ($tableName) $tableName .= ".";
- foreach ($request->input() as $param => $value){
- if ($param === 'paginate' || $param === 'page')continue;
- if (!$value || isset($columnQueryRules[$param]))continue;
- $query = $query->where($tableName.$param,$value);
- }
- //rules: alias timeLimit startDate endDate like multi
- foreach ($columnQueryRules as $param => $rules){
- if (!$request->input($param))continue;
- $isExecute = true;
- $column = $param;
- foreach ($rules as $rule => $value){
- if ($rule === 'alias'){
- $column = $value;
- $isExecute = false;
- }
- if ($rule === 'timeLimit'){
- $today=Carbon::now()->subDays($value);
- $queryTemp=clone $query;
- $queryTemp=$queryTemp->where($tableName.$column,'like','%'.$request->input($param).'%')
- ->where($tableName.'created_at','>',$today);
- if($queryTemp->count()==0 || $queryTemp->first()[$column]==$request->input($param)){
- $query=$query->where($tableName.$column,$request->input($param));
- }else{
- $query=$query->where($tableName.$column,'like','%'.$request->input($param).'%')
- ->where($tableName.'created_at','>',$today);
- }
- $isExecute = true;
- }
- if ($rule === 'startDate'){
- $startDate = $request->input($param).$value;
- $query = $query->where($tableName.$column,'>=',$startDate);
- $isExecute = true;
- }
- if ($rule === 'endDate'){
- $endDate = $request->input($param).$value;
- $query = $query->where($tableName.$column,'<=',$endDate);
- $isExecute = true;
- }
- if ($rule === 'like'){
- $query = $query->where($tableName.$column,'like',$value.$request->input($param).$value);
- $isExecute = true;
- }
- if ($rule === 'multi'){
- $query = $query->whereIn($tableName.$column,explode($value,$request->input($param)));
- $isExecute = true;
- }
- }
- if (!$isExecute) $query = $query->where($tableName.$column,$request->input($param));
- }
- return $query;
- }
- }
|