@@ -33,6 +33,25 @@ public function apply(Builder $builder, Model $model)
33
33
$ this ->extend ($ builder );
34
34
}
35
35
36
+ /**
37
+ * Remove the scope from the given Eloquent query builder.
38
+ *
39
+ * @param \Illuminate\Database\Eloquent\Builder $builder
40
+ * @param \Illuminate\Database\Eloquent\Model $model
41
+ * @return void
42
+ */
43
+ public function remove (Builder $ builder , Model $ model )
44
+ {
45
+ $ table = $ model ->getVersionTable ();
46
+
47
+ $ query = $ builder ->getQuery ();
48
+
49
+ $ query ->joins = collect ($ query ->joins )->reject (function ($ join ) use ($ table )
50
+ {
51
+ return $ this ->isVersionJoinConstraint ($ join , $ table );
52
+ })->values ()->all ();
53
+ }
54
+
36
55
/**
37
56
* Extend the query builder with the needed functions.
38
57
*
@@ -58,7 +77,9 @@ protected function addVersion(Builder $builder)
58
77
$ builder ->macro ('version ' , function (Builder $ builder , $ version ) {
59
78
$ model = $ builder ->getModel ();
60
79
61
- $ builder ->withoutGlobalScope ($ this )->join ($ model ->getVersionTable (), function ($ join ) use ($ model , $ version ) {
80
+ $ this ->remove ($ builder , $ builder ->getModel ());
81
+
82
+ $ builder ->join ($ model ->getVersionTable (), function ($ join ) use ($ model , $ version ) {
62
83
$ join ->on ($ model ->getQualifiedKeyName (), '= ' , $ model ->getQualifiedVersionKeyName ());
63
84
$ join ->where ($ model ->getQualifiedVersionColumn (), '= ' , $ version );
64
85
});
@@ -78,12 +99,26 @@ protected function addAllVersions(Builder $builder)
78
99
$ builder ->macro ('allVersions ' , function (Builder $ builder ) {
79
100
$ model = $ builder ->getModel ();
80
101
81
- $ builder ->withoutGlobalScope ($ this )->join ($ model ->getVersionTable (), function ($ join ) use ($ model ) {
102
+ $ this ->remove ($ builder , $ builder ->getModel ());
103
+
104
+ $ builder ->join ($ model ->getVersionTable (), function ($ join ) use ($ model ) {
82
105
$ join ->on ($ model ->getQualifiedKeyName (), '= ' , $ model ->getQualifiedVersionKeyName ());
83
106
});
84
107
85
108
return $ builder ;
86
109
});
87
110
}
88
111
112
+ /**
113
+ * Determine if the given join clause is a version constraint.
114
+ *
115
+ * @param \Illuminate\Database\Query\JoinClause $join
116
+ * @param string $column
117
+ * @return bool
118
+ */
119
+ protected function isVersionJoinConstraint (JoinClause $ join , $ table )
120
+ {
121
+ return $ join ->type == 'inner ' && $ join ->table == $ table ;
122
+ }
123
+
89
124
}
0 commit comments