@@ -164,7 +164,7 @@ protected function resolveRelationColumn(string $column): string
164
164
{
165
165
$ parts = explode ('. ' , $ column );
166
166
$ columnName = array_pop ($ parts );
167
- $ relation = implode ('. ' , $ parts );
167
+ $ relation = str_replace ( ' [] ' , '' , implode ('. ' , $ parts) );
168
168
169
169
if ($ this ->isNotEagerLoaded ($ relation )) {
170
170
return $ column ;
@@ -184,54 +184,56 @@ protected function resolveRelationColumn(string $column): string
184
184
*/
185
185
protected function joinEagerLoadedColumn ($ relation , $ relationColumn )
186
186
{
187
- $ table = '' ;
187
+ $ tableAlias = '' ;
188
188
$ lastQuery = $ this ->query ;
189
189
foreach (explode ('. ' , $ relation ) as $ eachRelation ) {
190
190
$ model = $ lastQuery ->getRelation ($ eachRelation );
191
+ $ lastAlias = $ tableAlias ?: $ lastQuery ->getModel ()->getTable ();
192
+ $ tableAlias = $ tableAlias .'_ ' .$ eachRelation ;
193
+ $ pivotAlias = $ tableAlias .'_pivot ' ;
191
194
switch (true ) {
192
195
case $ model instanceof BelongsToMany:
193
- $ pivot = $ model ->getTable ();
194
- $ pivotPK = $ model ->getExistenceCompareKey ();
195
- $ pivotFK = $ model ->getQualifiedParentKeyName ();
196
+ $ pivot = $ model ->getTable (). ' as ' . $ pivotAlias ;
197
+ $ pivotPK = $ pivotAlias . ' . ' . $ model ->getForeignPivotKeyName ();
198
+ $ pivotFK = $ lastAlias . ' . ' . $ model ->getParentKeyName ();
196
199
$ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
197
200
198
201
$ related = $ model ->getRelated ();
199
- $ table = $ related ->getTable ();
202
+ $ table = $ related ->getTable (). ' as ' . $ tableAlias ;
200
203
$ tablePK = $ model ->getRelatedPivotKeyName ();
201
- $ foreign = $ pivot .'. ' .$ tablePK ;
202
- $ other = $ related ->getQualifiedKeyName ();
204
+ $ foreign = $ pivotAlias .'. ' .$ tablePK ;
205
+ $ other = $ tableAlias . ' . ' . $ related ->getKeyName ();
203
206
204
- $ lastQuery ->addSelect ($ table .'. ' .$ relationColumn );
205
- $ this ->performJoin ($ table , $ foreign , $ other );
207
+ $ lastQuery ->addSelect ($ tableAlias .'. ' .$ relationColumn );
206
208
207
209
break ;
208
210
209
211
case $ model instanceof HasOneThrough:
210
- $ pivot = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ]; // extract pivot table from key
211
- $ pivotPK = $ pivot .'. ' .$ model ->getFirstKeyName ();
212
- $ pivotFK = $ model ->getQualifiedLocalKeyName ();
212
+ $ pivot = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ]. ' as ' . $ pivotAlias ; // extract pivot table from key
213
+ $ pivotPK = $ pivotAlias .'. ' .$ model ->getFirstKeyName ();
214
+ $ pivotFK = $ lastAlias . ' . ' . $ model ->getLocalKeyName ();
213
215
$ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
214
216
215
217
$ related = $ model ->getRelated ();
216
- $ table = $ related ->getTable ();
218
+ $ table = $ related ->getTable (). ' as ' . $ tableAlias ;
217
219
$ tablePK = $ model ->getSecondLocalKeyName ();
218
- $ foreign = $ pivot .'. ' .$ tablePK ;
219
- $ other = $ related ->getQualifiedKeyName ();
220
+ $ foreign = $ pivotAlias .'. ' .$ tablePK ;
221
+ $ other = $ tableAlias . ' . ' . $ related ->getKeyName ();
220
222
221
223
$ lastQuery ->addSelect ($ lastQuery ->getModel ()->getTable ().'.* ' );
222
224
223
225
break ;
224
226
225
227
case $ model instanceof HasOneOrMany:
226
- $ table = $ model ->getRelated ()->getTable ();
227
- $ foreign = $ model ->getQualifiedForeignKeyName ();
228
- $ other = $ model ->getQualifiedParentKeyName ();
228
+ $ table = $ model ->getRelated ()->getTable (). ' as ' . $ tableAlias ;
229
+ $ foreign = $ tableAlias . ' . ' . $ model ->getForeignKeyName ();
230
+ $ other = $ lastAlias . ' . ' . $ model ->getLocalKeyName ();
229
231
break ;
230
232
231
233
case $ model instanceof BelongsTo:
232
- $ table = $ model ->getRelated ()->getTable ();
233
- $ foreign = $ model ->getQualifiedForeignKeyName ();
234
- $ other = $ model ->getQualifiedOwnerKeyName ();
234
+ $ table = $ model ->getRelated ()->getTable (). ' as ' . $ tableAlias ;
235
+ $ foreign = $ lastAlias . ' . ' . $ model ->getForeignKeyName ();
236
+ $ other = $ tableAlias . ' . ' . $ model ->getOwnerKeyName ();
235
237
break ;
236
238
237
239
default :
@@ -241,7 +243,7 @@ protected function joinEagerLoadedColumn($relation, $relationColumn)
241
243
$ lastQuery = $ model ->getQuery ();
242
244
}
243
245
244
- return $ table .'. ' .$ relationColumn ;
246
+ return $ tableAlias .'. ' .$ relationColumn ;
245
247
}
246
248
247
249
/**
0 commit comments