@@ -164,7 +164,7 @@ protected function resolveRelationColumn(string $column): string
164164 {
165165 $ parts = explode ('. ' , $ column );
166166 $ columnName = array_pop ($ parts );
167- $ relation = implode ('. ' , $ parts );
167+ $ relation = str_replace ( ' [] ' , '' , implode ('. ' , $ parts) );
168168
169169 if ($ this ->isNotEagerLoaded ($ relation )) {
170170 return $ column ;
@@ -184,54 +184,56 @@ protected function resolveRelationColumn(string $column): string
184184 */
185185 protected function joinEagerLoadedColumn ($ relation , $ relationColumn )
186186 {
187- $ table = '' ;
187+ $ tableAlias = '' ;
188188 $ lastQuery = $ this ->query ;
189189 foreach (explode ('. ' , $ relation ) as $ eachRelation ) {
190190 $ model = $ lastQuery ->getRelation ($ eachRelation );
191+ $ lastAlias = $ tableAlias ?: $ lastQuery ->getModel ()->getTable ();
192+ $ tableAlias = $ tableAlias .'_ ' .$ eachRelation ;
193+ $ pivotAlias = $ tableAlias .'_pivot ' ;
191194 switch (true ) {
192195 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 ();
196199 $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
197200
198201 $ related = $ model ->getRelated ();
199- $ table = $ related ->getTable ();
202+ $ table = $ related ->getTable (). ' as ' . $ tableAlias ;
200203 $ tablePK = $ model ->getRelatedPivotKeyName ();
201- $ foreign = $ pivot .'. ' .$ tablePK ;
202- $ other = $ related ->getQualifiedKeyName ();
204+ $ foreign = $ pivotAlias .'. ' .$ tablePK ;
205+ $ other = $ tableAlias . ' . ' . $ related ->getKeyName ();
203206
204- $ lastQuery ->addSelect ($ table .'. ' .$ relationColumn );
205- $ this ->performJoin ($ table , $ foreign , $ other );
207+ $ lastQuery ->addSelect ($ tableAlias .'. ' .$ relationColumn );
206208
207209 break ;
208210
209211 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 ();
213215 $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
214216
215217 $ related = $ model ->getRelated ();
216- $ table = $ related ->getTable ();
218+ $ table = $ related ->getTable (). ' as ' . $ tableAlias ;
217219 $ tablePK = $ model ->getSecondLocalKeyName ();
218- $ foreign = $ pivot .'. ' .$ tablePK ;
219- $ other = $ related ->getQualifiedKeyName ();
220+ $ foreign = $ pivotAlias .'. ' .$ tablePK ;
221+ $ other = $ tableAlias . ' . ' . $ related ->getKeyName ();
220222
221223 $ lastQuery ->addSelect ($ lastQuery ->getModel ()->getTable ().'.* ' );
222224
223225 break ;
224226
225227 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 ();
229231 break ;
230232
231233 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 ();
235237 break ;
236238
237239 default :
@@ -241,7 +243,7 @@ protected function joinEagerLoadedColumn($relation, $relationColumn)
241243 $ lastQuery = $ model ->getQuery ();
242244 }
243245
244- return $ table .'. ' .$ relationColumn ;
246+ return $ tableAlias .'. ' .$ relationColumn ;
245247 }
246248
247249 /**
0 commit comments