Passed
Push — feature/optimize ( 219eef...0e0305 )
by Fu
03:34
created

ParserSearchOrClosureTrait   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 27
dl 0
loc 32
rs 10
c 0
b 0
f 0
wmc 4

1 Method

Rating   Name   Duplication   Size   Complexity  
A parserSearchOrClosure() 0 30 4
1
<?php
2
3
4
namespace Modules\Core\Traits\Criteria;
5
6
7
use Illuminate\Database\Eloquent\Builder;
8
9
/**
10
 * Trait ParserSearchOrClosureTrait
11
 *
12
 * @property \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|\Illuminate\Database\Query\Builder $model
13
 * @package Modules\Core\Traits\Criteria
14
 */
15
trait ParserSearchOrClosureTrait
16
{
17
    protected function parserSearchOrClosure($value, $field, $condition)
18
    {
19
        $modelTableName = $this->model->getModel()->getTable();
20
        switch ($condition) {
21
            case 'in':
22
                $this->model = $this->model->orWhereIn($modelTableName.'.'.$field, $value);
23
                break;
24
            case 'between':
25
                $this->model = $this->model->orWhereBetween($modelTableName.'.'.$field, $value);
26
                break;
27
            case 'cross':
28
                $this->model = $this->model->orWhere(function (Builder $query) use ($field, $value) {
29
                    $query->where(function (Builder $query) use ($field, $value) {
30
                        $query->where("{$field}_min", '<=', $value[0])
31
                              ->where("{$field}_max", '>=', $value[1]);
32
                    })->orWhere(function (Builder $query) use ($field, $value) {
33
                        $query->where("{$field}_min", '<=', $value[0])
34
                              ->where("{$field}_max", '>=', $value[0]);
35
                    })->orWhere(function (Builder $query) use ($field, $value) {
36
                        $query->where("{$field}_min", '>=', $value[0])
37
                              ->where("{$field}_max", '<=', $value[1]);
38
                    })->orWhere(function (Builder $query) use ($field, $value) {
39
                        $query->where("{$field}_min", '>=', $value[0])
40
                              ->where("{$field}_max", '>=', $value[1])
41
                              ->where("{$field}_min", '<=', $value[1]);
42
                    });
43
                });
44
                break;
45
            default:
46
                $this->model = $this->model->orWhere($modelTableName.'.'.$field, $condition, $value);
47
        }
48
    }
49
}