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

parserSearchOrClosure()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 30
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 26
nc 4
nop 3
dl 0
loc 30
rs 9.504
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 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
}