Completed
Push — v0.3.2 ( 9349ed...1a3dba )
by Richan
01:33
created

ModelHasUpdated::getQuery()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.8666
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
namespace RichanFongdasen\Varnishable\Events;
4
5
use Illuminate\Database\Eloquent\Model;
6
use Illuminate\Database\Eloquent\SoftDeletes;
7
use Illuminate\Queue\SerializesModels;
8
9
class ModelHasUpdated
10
{
11
    use SerializesModels;
12
13
    /**
14
     * Eloquent model's data
15
     * after getting serialized into array.
16
     *
17
     * @var array
18
     */
19
    protected $data;
20
21
    /**
22
     * Eloquent model object.
23
     *
24
     * @var \Illuminate\Database\Eloquent\Model
25
     */
26
    protected $model;
27
28
    /**
29
     * Eloquent model class name.
30
     *
31
     * @var string
32
     */
33
    protected $modelClass;
34
35
    /**
36
     * Event constructor.
37
     *
38
     * @param \Illuminate\Database\Eloquent\Model $model
39
     */
40
    public function __construct(Model $model)
41
    {
42
        $this->data = $model->toArray();
43
        $this->modelClass = get_class($model);
44
    }
45
46
    /**
47
     * Create dirty eloquent model object
48
     * based on the last saved model data.
49
     *
50
     * @return \Illuminate\Database\Eloquent\Model
51
     */
52
    protected function createDirtyModel()
53
    {
54
        $this->model = app($this->modelClass);
55
        $this->model->fill($this->data);
56
57
        $key = $this->model->getKeyName();
58
        $this->model->setAttribute($key, data_get($this->data, $key));
59
60
        return $this->model;
61
    }
62
63
    /**
64
     * Get eloquent query builder for
65
     * the given eloquent model.
66
     *
67
     * @param \Illuminate\Database\Eloquent\Model $model
68
     *
69
     * @return \Illuminate\Database\Eloquent\Builder
70
     */
71
    protected function getQuery(Model $model)
72
    {
73
        $query = $model->newQuery();
74
75
        $traits = class_uses($model);
76
77
        if (in_array(SoftDeletes::class, $traits, true)) {
78
            $query->withTrashed();
79
        }
80
81
        return $query;
82
    }
83
84
    /**
85
     * Model accessor.
86
     *
87
     * @return \Illuminate\Database\Eloquent\Model
88
     */
89
    public function model()
90
    {
91
        return $this->retrieveModel() ?? $this->createDirtyModel();
92
    }
93
94
    /**
95
     * Retrieve fresh eloquent model from
96
     * run-time cache or the database.
97
     *
98
     * @return \Illuminate\Database\Eloquent\Model|null
99
     */
100
    protected function retrieveModel()
101
    {
102
        if ($this->model !== null) {
103
            return $this->model;
104
        }
105
106
        $model = app($this->modelClass);
107
108
        $this->model = $this->getQuery($model)->find(data_get($this->data, $model->getKeyName()));
109
110
        return $this->model;
111
    }
112
}
113