Completed
Push — master ( 4cc8d8...e56a52 )
by Arjay
04:43
created

Datatables::usingCollection()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
3
namespace Yajra\Datatables;
4
5
/**
6
 * Laravel Datatables Package
7
 * This Package is created to handle server-side works of DataTables Jquery Plugin (http://datatables.net)
8
 *
9
 * @package  Laravel
10
 * @category Package
11
 * @author   Arjay Angeles <[email protected]>
12
 */
13
14
use Illuminate\Database\Query\Builder as QueryBuilder;
15
use Illuminate\Support\Collection;
16
use Yajra\Datatables\Engines\CollectionEngine;
17
use Yajra\Datatables\Engines\EloquentEngine;
18
use Yajra\Datatables\Engines\QueryBuilderEngine;
19
20
/**
21
 * Class Datatables
22
 *
23
 * @package Yajra\Datatables
24
 * @method  EloquentEngine eloquent($builder)
25
 * @method  CollectionEngine collection(Collection $builder)
26
 * @method  QueryBuilderEngine queryBuilder(QueryBuilder $builder)
27
 */
28
class Datatables
29
{
30
    /**
31
     * Datatables request object.
32
     *
33
     * @var \Yajra\Datatables\Request
34
     */
35
    public $request;
36
37
    /**
38
     * Datatables builder.
39
     *
40
     * @var mixed
41
     */
42
    public $builder;
43
44
    /**
45
     * Class Constructor
46
     *
47
     * @param \Yajra\Datatables\Request $request
48
     */
49
    public function __construct(Request $request)
50
    {
51
        $this->request = $request->request->count() ? $request : Request::capture();
52
    }
53
54
    /**
55
     * Gets query and returns instance of class
56
     *
57
     * @param  mixed $builder
58
     * @return mixed
59
     */
60
    public static function of($builder)
61
    {
62
        $datatables          = app('datatables');
63
        $datatables->builder = $builder;
64
65
        if ($builder instanceof QueryBuilder) {
66
            $ins = $datatables->usingQueryBuilder($builder);
67
        } else {
68
            $ins = $builder instanceof Collection ? $datatables->usingCollection($builder) : $datatables->usingEloquent($builder);
69
        }
70
71
        return $ins;
72
    }
73
74
    /**
75
     * Datatables using Query Builder.
76
     *
77
     * @param \Illuminate\Database\Query\Builder $builder
78
     * @return \Yajra\Datatables\Engines\QueryBuilderEngine
79
     */
80
    public function usingQueryBuilder(QueryBuilder $builder)
81
    {
82
        return new QueryBuilderEngine($builder, $this->request);
83
    }
84
85
    /**
86
     * Datatables using Collection.
87
     *
88
     * @param \Illuminate\Support\Collection $builder
89
     * @return \Yajra\Datatables\Engines\CollectionEngine
90
     */
91
    public function usingCollection(Collection $builder)
92
    {
93
        return new CollectionEngine($builder, $this->request);
94
    }
95
96
    /**
97
     * Allows api call without the "using" word.
98
     *
99
     * @param  string $name
100
     * @param  mixed $arguments
101
     * @return $this|mixed
102
     */
103
    public function __call($name, $arguments)
104
    {
105
        $name = 'using' . ucfirst($name);
106
107
        if (method_exists($this, $name)) {
108
            return call_user_func_array([$this, $name], $arguments);
109
        }
110
111
        return trigger_error('Call to undefined method ' . __CLASS__ . '::' . $name . '()', E_USER_ERROR);
112
    }
113
114
    /**
115
     * Datatables using Eloquent
116
     *
117
     * @param  mixed $builder
118
     * @return \Yajra\Datatables\Engines\EloquentEngine
119
     */
120
    public function usingEloquent($builder)
121
    {
122
        return new EloquentEngine($builder, $this->request);
123
    }
124
125
    /**
126
     * Get html builder class.
127
     *
128
     * @return \Yajra\Datatables\Html\Builder
129
     */
130
    public function getHtmlBuilder()
131
    {
132
        return app('Yajra\Datatables\Html\Builder');
133
    }
134
135
    /**
136
     * Get request object.
137
     *
138
     * @return \Yajra\Datatables\Request|static
139
     */
140
    public function getRequest()
141
    {
142
        return $this->request;
143
    }
144
}
145