@@ 66-79 (lines=14) @@ | ||
63 | * |
|
64 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
65 | */ |
|
66 | protected function addLeftJoinSubquery($builder) |
|
67 | { |
|
68 | $builder->macro('leftJoinSubquery', function ($builder, $subquery, $alias, \Closure $on) { |
|
69 | /* |
|
70 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
71 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
72 | */ |
|
73 | $builder->leftJoin(DB::raw('('.$subquery->toSql().') '.$builder->getQuery()->getGrammar()->wrap($alias)), $on); |
|
74 | //merge bindings from subquery |
|
75 | $this->addBindings($builder, $subquery->getBindings(), 'join'); |
|
76 | ||
77 | return $builder; |
|
78 | }); |
|
79 | } |
|
80 | ||
81 | /** |
|
82 | * Add extension to the builder. |
|
@@ 86-99 (lines=14) @@ | ||
83 | * |
|
84 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
85 | */ |
|
86 | protected function addRightJoinSubquery($builder) |
|
87 | { |
|
88 | $builder->macro('rightJoinSubquery', function ($builder, $subquery, $alias, \Closure $on) { |
|
89 | /* |
|
90 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
91 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
92 | */ |
|
93 | $builder->rightJoin(DB::raw('('.$subquery->toSql().') '.$builder->getQuery()->getGrammar()->wrap($alias)), $on); |
|
94 | //merge bindings from subquery |
|
95 | $this->addBindings($builder, $subquery->getBindings(), 'join'); |
|
96 | ||
97 | return $builder; |
|
98 | }); |
|
99 | } |
|
100 | ||
101 | /** |
|
102 | * Add extension to the builder. |
|
@@ 106-119 (lines=14) @@ | ||
103 | * |
|
104 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
105 | */ |
|
106 | protected function addJoinSubquery($builder) |
|
107 | { |
|
108 | $builder->macro('joinSubquery', function ($builder, $subquery, $alias, \Closure $on) { |
|
109 | /* |
|
110 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
111 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
112 | */ |
|
113 | $builder->join(DB::raw('('.$subquery->toSql().') '.$builder->getQuery()->getGrammar()->wrap($alias)), $on); |
|
114 | //merge bindings from subquery |
|
115 | $this->addBindings($builder, $subquery->getBindings(), 'join'); |
|
116 | ||
117 | return $builder; |
|
118 | }); |
|
119 | } |
|
120 | ||
121 | /** |
|
122 | * Add extension to the builder. |
|
@@ 126-139 (lines=14) @@ | ||
123 | * |
|
124 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
125 | */ |
|
126 | protected function addWhereInSubquery($builder) |
|
127 | { |
|
128 | $builder->macro('whereInSubquery', function ($builder, $field, $subquery) { |
|
129 | /* |
|
130 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
131 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
132 | */ |
|
133 | $builder->whereRaw($builder->getQuery()->getGrammar()->wrap($field).' IN ('.$subquery->toSql().')'); |
|
134 | //merge bindings from subquery |
|
135 | $this->addBindings($builder, $subquery->getBindings(), 'where'); |
|
136 | ||
137 | return $builder; |
|
138 | }); |
|
139 | } |
|
140 | ||
141 | /** |
|
142 | * Add extension to the builder. |
|
@@ 146-159 (lines=14) @@ | ||
143 | * |
|
144 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
145 | */ |
|
146 | protected function addWhereNotInSubquery($builder) |
|
147 | { |
|
148 | $builder->macro('whereNotInSubquery', function ($builder, $field, $subquery) { |
|
149 | /* |
|
150 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
151 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
152 | */ |
|
153 | $builder->whereRaw($builder->getQuery()->getGrammar()->wrap($field).' NOT IN ('.$subquery->toSql().')'); |
|
154 | //merge bindings from subquery |
|
155 | $this->addBindings($builder, $subquery->getBindings(), 'where'); |
|
156 | ||
157 | return $builder; |
|
158 | }); |
|
159 | } |
|
160 | ||
161 | /** |
|
162 | * Add extension to the builder. |
|
@@ 166-179 (lines=14) @@ | ||
163 | * |
|
164 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
165 | */ |
|
166 | protected function addOrWhereInSubquery($builder) |
|
167 | { |
|
168 | $builder->macro('orWhereInSubquery', function ($builder, $field, $subquery) { |
|
169 | /* |
|
170 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
171 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
172 | */ |
|
173 | $builder->orWhereRaw($builder->getQuery()->getGrammar()->wrap($field).' IN ('.$subquery->toSql().')'); |
|
174 | //merge bindings from subquery |
|
175 | $this->addBindings($builder, $subquery->getBindings(), 'where'); |
|
176 | ||
177 | return $builder; |
|
178 | }); |
|
179 | } |
|
180 | ||
181 | /** |
|
182 | * Add extension to the builder. |
|
@@ 186-199 (lines=14) @@ | ||
183 | * |
|
184 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
185 | */ |
|
186 | protected function addOrWhereNotInSubquery($builder) |
|
187 | { |
|
188 | $builder->macro('orWhereNotInSubquery', function ($builder, $field, $subquery) { |
|
189 | /* |
|
190 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
191 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
192 | */ |
|
193 | $builder->orWhereRaw($builder->getQuery()->getGrammar()->wrap($field).' NOT IN ('.$subquery->toSql().')'); |
|
194 | //merge bindings from subquery |
|
195 | $this->addBindings($builder, $subquery->getBindings(), 'where'); |
|
196 | ||
197 | return $builder; |
|
198 | }); |
|
199 | } |
|
200 | ||
201 | /** |
|
202 | * Add extension to the builder. |
|
@@ 206-219 (lines=14) @@ | ||
203 | * |
|
204 | * @param \Illuminate\Database\Eloquent\Builder|Relation $builder |
|
205 | */ |
|
206 | protected function addFromSubquery($builder) |
|
207 | { |
|
208 | $builder->macro('fromSubquery', function ($builder, $subquery, $alias) { |
|
209 | /* |
|
210 | * @var $builder \Illuminate\Database\Eloquent\Builder|Relation |
|
211 | * @var $subquery \Illuminate\Database\Eloquent\Builder|Relation |
|
212 | */ |
|
213 | $builder->from(DB::raw('('.$subquery->toSql().') '.$builder->getQuery()->getGrammar()->wrap($alias))); |
|
214 | //merge bindings from subquery |
|
215 | $builder->setBindings(array_merge($subquery->getBindings(), $builder->getBindings())); |
|
216 | ||
217 | return $builder; |
|
218 | }); |
|
219 | } |
|
220 | } |
|
221 |