Completed
Push — master ( ca7ffd...251636 )
by Denis
01:28
created

EloquentDataProvider::baseQuery()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 4
nop 1
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace Woo\GridView\DataProviders;
4
5
use Illuminate\Database\Eloquent\Builder;
6
use Woo\GridView\GridViewRequest;
7
8
class EloquentDataProvider extends BaseDataProvider
9
{
10
    protected $query;
11
12
    /**
13
     * EloquentDataProvider constructor.
14
     * @param Builder $query
15
     */
16
    public function __construct(Builder $query)
17
    {
18
        $this->query = clone $query;
19
    }
20
21
    /**
22
     * @param GridViewRequest $request
23
     * @return Builder
24
     */
25
    protected function baseQuery(GridViewRequest $request)
26
    {
27
        $query = clone $this->query;
28
29
        foreach ($request->filters as $field => $value) {
30
            $query->where($field, 'LIKE', '%' . $value . '%');
31
        }
32
33
        if ($request->sortColumn) {
34
            $query->orderBy($request->sortColumn, $request->sortOrder);
35
        }
36
37
        return $query;
38
    }
39
40
    /**
41
     * @inheritdoc
42
     */
43
    public function getCount(GridViewRequest $request) : int
44
    {
45
        return $this->baseQuery($request)->count();
46
    }
47
48
    /**
49
     * @inheritdoc
50
     */
51
    public function getData(GridViewRequest $request)
52
    {
53
        $query = $this->baseQuery($request);
54
55
        if ($request->perPage == 0) {
56
            return $query->get();
57
        }
58
59
        return $query->offset(($request->page - 1) * $request->perPage)
60
            ->limit($request->perPage)
61
            ->get();
62
    }
63
}