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

parserSearchAndClosure()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 29
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 25
nc 4
nop 3
dl 0
loc 29
rs 9.52
c 0
b 0
f 0
1
<?php
2
3
4
namespace Modules\Core\Traits\Criteria;
5
6
7
use Illuminate\Database\Eloquent\Builder;
8
9
/**
10
 * Trait ParserSearchAndClosureTrait
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 ParserSearchAndClosureTrait
16
{
17
    protected function parserSearchAndClosure($value, $field, $condition)
18
    {
19
        switch ($condition) {
20
            case 'in':
21
                $this->model = $this->model->whereIn($field, $value);
22
                break;
23
            case 'between':
24
                $this->model = $this->model->whereBetween($field, $value);
25
                break;
26
            case 'cross':
27
                $this->model = $this->model->where(function (Builder $query) use ($field, $value) {
28
                    $query->where(function (Builder $query) use ($field, $value) {
29
                        $query->where("{$field}_min", '<=', $value[0])
30
                              ->where("{$field}_max", '>=', $value[1]);
31
                    })->orWhere(function (Builder $query) use ($field, $value) {
32
                        $query->where("{$field}_min", '<=', $value[0])
33
                              ->where("{$field}_max", '>=', $value[0]);
34
                    })->orWhere(function (Builder $query) use ($field, $value) {
35
                        $query->where("{$field}_min", '>=', $value[0])
36
                              ->where("{$field}_max", '<=', $value[1]);
37
                    })->orWhere(function (Builder $query) use ($field, $value) {
38
                        $query->where("{$field}_min", '>=', $value[0])
39
                              ->where("{$field}_max", '>=', $value[1])
40
                              ->where("{$field}_min", '<=', $value[1]);
41
                    });
42
                });
43
                break;
44
            default:
45
                $this->model = $this->model->where($field, $condition, $value);
46
        }
47
    }
48
}