@@ -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,64 +184,66 @@ protected function resolveRelationColumn(string $column): string
184184 */
185185 protected function joinEagerLoadedColumn ($ relation , $ relationColumn )
186186 {
187- $ table = '' ;
187+ $ table = $ tableAlias = '' ;
188188 $ lastQuery = $ this ->query ;
189189 foreach (explode ('. ' , $ relation ) as $ eachRelation ) {
190190 $ model = $ lastQuery ->getRelation ($ eachRelation );
191+ $ lastAlias = $ tableAlias ?: $ model ->getParent ()->getTable ();
192+ $ tableAlias = $ tableAlias .'_ ' .$ eachRelation ;
193+ $ pivotAlias = $ tableAlias .'_pivot ' ;
191194 switch (true ) {
192195 case $ model instanceof BelongsToMany:
193196 $ pivot = $ model ->getTable ();
194- $ pivotPK = $ model ->getExistenceCompareKey ();
195- $ pivotFK = $ model ->getQualifiedParentKeyName ();
196- $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
197+ $ pivotPK = $ pivotAlias . ' . ' . $ model ->getForeignPivotKeyName ();
198+ $ pivotFK = $ lastAlias . ' . ' . $ model ->getParentKeyName ();
199+ $ this ->performJoin ($ pivot. ' as ' . $ pivotAlias , $ pivotPK , $ pivotFK );
197200
198201 $ related = $ model ->getRelated ();
199202 $ table = $ related ->getTable ();
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:
210212 $ pivot = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ]; // extract pivot table from key
211- $ pivotPK = $ pivot .'. ' .$ model ->getFirstKeyName ();
212- $ pivotFK = $ model ->getQualifiedLocalKeyName ();
213- $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
213+ $ pivotPK = $ pivotAlias .'. ' .$ model ->getFirstKeyName ();
214+ $ pivotFK = $ lastAlias . ' . ' . $ model ->getLocalKeyName ();
215+ $ this ->performJoin ($ pivot. ' as ' . $ pivotAlias , $ pivotPK , $ pivotFK );
214216
215217 $ related = $ model ->getRelated ();
216218 $ table = $ related ->getTable ();
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:
226228 $ table = $ model ->getRelated ()->getTable ();
227- $ foreign = $ model ->getQualifiedForeignKeyName ();
228- $ other = $ model ->getQualifiedParentKeyName ();
229+ $ foreign = $ lastAlias . ' . ' . $ model ->getForeignKeyName ();
230+ $ other = $ tableAlias . ' . ' . $ model ->getLocalKeyName ();
229231 break ;
230232
231233 case $ model instanceof BelongsTo:
232234 $ table = $ model ->getRelated ()->getTable ();
233- $ foreign = $ model ->getQualifiedForeignKeyName ();
234- $ other = $ model ->getQualifiedOwnerKeyName ();
235+ $ foreign = $ lastAlias . ' . ' . $ model ->getForeignKeyName ();
236+ $ other = $ tableAlias . ' . ' . $ model ->getOwnerKeyName ();
235237 break ;
236238
237239 default :
238240 throw new Exception ('Relation ' .$ model ::class.' is not yet supported. ' );
239241 }
240- $ this ->performJoin ($ table , $ foreign , $ other );
242+ $ this ->performJoin ($ table. ' as ' . $ tableAlias , $ foreign , $ other );
241243 $ lastQuery = $ model ->getQuery ();
242244 }
243245
244- return $ table .'. ' .$ relationColumn ;
246+ return $ tableAlias .'. ' .$ relationColumn ;
245247 }
246248
247249 /**
0 commit comments