Builder::findMany()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
dl 0
loc 20
ccs 0
cts 18
cp 0
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 11
nc 3
nop 2
crap 12
1
<?php
2
3
namespace Tylercd100\Database\Eloquent;
4
5
use Illuminate\Database\Eloquent\Builder as IlluminateBuilder;
6
use Illuminate\Support\Facades\Cache;
7
8
class Builder extends IlluminateBuilder
9
{
10
    /**
11
     * Find a model by its primary key.
12
     *
13
     * @param  mixed  $id
14
     * @param  array  $columns
15
     * @return \Illuminate\Database\Eloquent\Model|\Illuminate\Database\Eloquent\Collection|null
16
     */
17
    public function find($id, $columns = ['*'])
18
    {
19
        if (! $this->isBasicQuery()) {
20
            return parent::find($id, $columns);
21
        }
22
23
        if (is_array($id)) {
24
            return $this->findMany($id, $columns);
25
        }
26
27
        return Cache::tags($this->model->getTable())->remember(
28
            $id,
29
            $this->model->cacheExpiry,
30
            function () use ($id, $columns) {
31
                return parent::find($id, $columns);
32
            }
33
        );
34
    }
35
36
    /**
37
     * Find a model by its primary key.
38
     *
39
     * @param  array  $ids
40
     * @param  array  $columns
41
     * @return \Illuminate\Database\Eloquent\Collection
42
     */
43
    public function findMany($ids, $columns = ['*'])
44
    {
45
        if (! $this->isBasicQuery()) {
46
            return parent::findMany($ids, $columns);
47
        }
48
49
        if (empty($ids)) {
50
            return $this->model->newCollection();
51
        }
52
53
        return $this->model->newCollection(
54
            Cache::tags($this->model->getTable())->rememberMany(
55
                $ids,
56
                $this->model->cacheExpiry,
57
                function ($ids) use ($columns) {
58
                    return parent::findMany($ids, $columns)->all();
59
                }
60
            )
61
        );
62
    }
63
64
    /**
65
     * Check if the current query is a basic query or has had some
66
     * conditions (where, joins, etc) attached to it.
67
     *
68
     * @return boolean
69
     */
70
    protected function isBasicQuery()
71
    {
72
        $freshQuery = $this->query
73
            ->newQuery()
74
            ->from($this->model->getTable());
75
76
        return $this->query == $freshQuery && empty($this->eagerLoad);
77
    }
78
}
79