1
+ <?php
2
+
3
+ namespace JoyceZ \LaravelLib \Model \Concerns ;
4
+
5
+ use Illuminate \Database \Eloquent \Builder ;
6
+ use Illuminate \Database \Eloquent \Model ;
7
+ use Illuminate \Database \Eloquent \SoftDeletingScope ;
8
+
9
+ class SoftDeletingScopeEx extends SoftDeletingScope
10
+ {
11
+ /**
12
+ * 将约束加到 Eloquent 查询构造中,这样默认查询的就是 `is_deleted` = 0 的记录了
13
+ * Apply the scope to a given Eloquent query builder.
14
+ *
15
+ * @param \Illuminate\Database\Eloquent\Builder $builder
16
+ * @param \Illuminate\Database\Eloquent\Model $model
17
+ * @return void
18
+ */
19
+ public function apply (Builder $ builder , Model $ model ) {
20
+ $ builder ->where ($ model ->getQualifiedDeletedAtColumn (), 0 );
21
+ }
22
+
23
+ /**
24
+ * Extend the query builder with the needed functions.
25
+ *
26
+ * @param \Illuminate\Database\Eloquent\Builder $builder
27
+ * @return void
28
+ */
29
+ public function extend (Builder $ builder ) {
30
+ foreach ($ this ->extensions as $ extension ) {
31
+ $ this ->{"add {$ extension }" }($ builder );
32
+ }
33
+
34
+ $ builder ->onDelete (function (Builder $ builder ) {
35
+ $ column = $ this ->getDeletedAtColumn ($ builder );
36
+
37
+ return $ builder ->update ([
38
+ $ column => \DB ::Raw ('UNIX_TIMESTAMP(NOW()) ' )
39
+ ]);
40
+ });
41
+ }
42
+
43
+ /**
44
+ * Add the restore extension to the builder.
45
+ *
46
+ * @param \Illuminate\Database\Eloquent\Builder $builder
47
+ * @return void
48
+ */
49
+ protected function addRestore (Builder $ builder ) {
50
+ $ builder ->macro ('restore ' , function (Builder $ builder ) {
51
+ $ builder ->withTrashed ();
52
+
53
+ return $ builder ->update ([
54
+ $ builder ->getModel ()
55
+ ->getDeletedAtColumn () => 0
56
+ ]);
57
+ });
58
+ }
59
+
60
+ /**
61
+ * Add the without-trashed extension to the builder.
62
+ *
63
+ * @param \Illuminate\Database\Eloquent\Builder $builder
64
+ * @return void
65
+ */
66
+ protected function addWithoutTrashed (Builder $ builder ) {
67
+ $ builder ->macro ('withoutTrashed ' , function (Builder $ builder ) {
68
+ $ model = $ builder ->getModel ();
69
+
70
+ $ builder ->withoutGlobalScope ($ this )
71
+ ->where ($ model ->getQualifiedDeletedAtColumn (), 0 );
72
+
73
+ return $ builder ;
74
+ });
75
+ }
76
+
77
+ /**
78
+ * Add the only-trashed extension to the builder.
79
+ *
80
+ * @param \Illuminate\Database\Eloquent\Builder $builder
81
+ * @return void
82
+ */
83
+ protected function addOnlyTrashed (Builder $ builder ) {
84
+ $ builder ->macro ('onlyTrashed ' , function (Builder $ builder ) {
85
+ $ model = $ builder ->getModel ();
86
+
87
+ $ builder ->withoutGlobalScope ($ this )
88
+ ->where ($ model ->getQualifiedDeletedAtColumn (), '<> ' , 0 );
89
+
90
+ return $ builder ;
91
+ });
92
+ }
93
+ }
0 commit comments