Passed
Push — master ( d547da...a192e7 )
by Babak
02:05
created

QueryHelper::getValueArray()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 2
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: alive
5
 * Date: 10/8/17
6
 * Time: 4:04 AM
7
 */
8
9
namespace Alive2212\LaravelQueryHelper;
10
11
class QueryHelper
12
{
13
    /**
14
     * @param $query
15
     * @param $filters
16
     * @return mixed
17
     */
18
    public function deepFilter($query, $filters)
19
    {
20
        $result = $query;
21
        foreach ($filters as $filter) {
22
            $keys = explode('.', $filter['key']);
23
            if (collect($keys)->count() == 2) {
24
                $result = $result->whereHas($keys[0], function ($query) use ($filter, $keys) {
25
                    $query->where($keys[1], $filter['operator'], $filter['value']);
26
                });
27
            } elseif (collect($keys)->count() == 3) {
28
                $result = $result->whereHas($keys[0], function ($query) use ($filter, $keys) {
29
                    $query->whereHas($keys[1], function ($query) use ($filter, $keys) {
30
                        $query->where($keys[2], $filter['operator'], $filter['value']);
31
                    });
32
                });
33
            } elseif (collect($keys)->count() == 4) {
34
                $result = $result->whereHas($keys[0], function ($query) use ($filter, $keys) {
35
                    $query->whereHas($keys[1], function ($query) use ($filter, $keys) {
36
                        $query->whereHas($keys[2], function ($query) use ($filter, $keys) {
37
                            $query->where($keys[3], $filter['operator'], $filter['value']);
38
                        });
39
                    });
40
                });
41
            } elseif (collect($keys)->count() == 1) {
42
                $result = $result->where($keys[0], $filter['operator'], $filter['value']);
43
            }
44
        }
45
        return $result;
46
    }
47
48
    /**
49
     * @param $query
50
     * @param $filters
51
     * @return mixed
52
     */
53
    public function orDeepFilter($query, $filters)
54
    {
55
        $result = $query;
56
        $keys = explode('.', $filters[0]['key']);
57
        if (collect($keys)->count() == 2) {
58
            $result = $result->orWhereHas($keys[0], function ($query) use ($filters, $keys) {
0 ignored issues
show
Unused Code introduced by
The import $keys is not used and could be removed.

This check looks for imports that have been defined, but are not used in the scope.

Loading history...
59
                foreach ($filters as $filter) {
60
                    $keys = explode('.', $filter['key']);
61
                    $query->where($keys[1], $filter['operator'], $filter['value']);
62
                }
63
            });
64
        }
65
        return $result;
66
    }
67
68
    /**
69
     * @param $query
70
     * @param $param
71
     * @return mixed
72
     */
73
    public function orderBy($query, $param)
74
    {
75
        $result = $query;
76
        if ($param->count()) {
77
            $query->orderBy($param['field'], $param['operator']);
78
        }
79
        return $result;
80
    }
81
82
    /**
83
     * @param $params
84
     * @param $field
85
     * @return array
86
     */
87
    public function getValueArray($params, $field)
88
    {
89
        $result = [];
90
        foreach ($params as $key => $item) {
91
            array_push($result, $item[$field]);
92
        }
93
        return $result;
94
    }
95
}