1717 */
1818class EloquentDataTable extends QueryDataTable
1919{
20+ /**
21+ * Flag to enable the generation of unique table aliases on eagerly loaded join columns.
22+ * You may want to enable it if you encounter a "Not unique table/alias" error when performing a search or applying ordering.
23+ */
24+ protected bool $ enableEagerJoinAliases = false ;
25+
2026 /**
2127 * EloquentEngine constructor.
2228 */
@@ -183,22 +189,34 @@ protected function resolveRelationColumn(string $column): string
183189 */
184190 protected function joinEagerLoadedColumn ($ relation , $ relationColumn )
185191 {
186- $ tableAlias = '' ;
192+ $ tableAlias = $ pivotAlias = '' ;
187193 $ lastQuery = $ this ->query ;
188194 foreach (explode ('. ' , $ relation ) as $ eachRelation ) {
189195 $ model = $ lastQuery ->getRelation ($ eachRelation );
190- $ lastAlias = $ tableAlias ?: $ this ->getTablePrefix ($ lastQuery );
191- $ tableAlias = $ tableAlias .'_ ' .$ eachRelation ;
192- $ pivotAlias = $ tableAlias .'_pivot ' ;
196+ if ($ this ->enableEagerJoinAliases ) {
197+ $ lastAlias = $ tableAlias ?: $ this ->getTablePrefix ($ lastQuery );
198+ $ tableAlias = $ tableAlias .'_ ' .$ eachRelation ;
199+ $ pivotAlias = $ tableAlias .'_pivot ' ;
200+ } else {
201+ $ lastAlias = $ tableAlias ?: $ lastQuery ->getModel ()->getTable ();
202+ }
193203 switch (true ) {
194204 case $ model instanceof BelongsToMany:
195- $ pivot = $ model ->getTable ().' as ' .$ pivotAlias ;
205+ if ($ this ->enableEagerJoinAliases ) {
206+ $ pivot = $ model ->getTable ().' as ' .$ pivotAlias ;
207+ } else {
208+ $ pivot = $ pivotAlias = $ model ->getTable ();
209+ }
196210 $ pivotPK = $ pivotAlias .'. ' .$ model ->getForeignPivotKeyName ();
197211 $ pivotFK = ltrim ($ lastAlias .'. ' .$ model ->getParentKeyName (), '. ' );
198212 $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
199213
200214 $ related = $ model ->getRelated ();
201- $ table = $ related ->getTable ().' as ' .$ tableAlias ;
215+ if ($ this ->enableEagerJoinAliases ) {
216+ $ table = $ related ->getTable ().' as ' .$ tableAlias ;
217+ } else {
218+ $ table = $ tableAlias = $ related ->getTable ();
219+ }
202220 $ tablePK = $ model ->getRelatedPivotKeyName ();
203221 $ foreign = $ pivotAlias .'. ' .$ tablePK ;
204222 $ other = $ tableAlias .'. ' .$ related ->getKeyName ();
@@ -208,13 +226,21 @@ protected function joinEagerLoadedColumn($relation, $relationColumn)
208226 break ;
209227
210228 case $ model instanceof HasOneThrough:
211- $ pivot = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ].' as ' .$ pivotAlias ; // extract pivot table from key
229+ if ($ this ->enableEagerJoinAliases ) {
230+ $ pivot = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ].' as ' .$ pivotAlias ;
231+ } else {
232+ $ pivot = $ pivotAlias = explode ('. ' , $ model ->getQualifiedParentKeyName ())[0 ];
233+ }
212234 $ pivotPK = $ pivotAlias .'. ' .$ model ->getFirstKeyName ();
213235 $ pivotFK = ltrim ($ lastAlias .'. ' .$ model ->getLocalKeyName (), '. ' );
214236 $ this ->performJoin ($ pivot , $ pivotPK , $ pivotFK );
215237
216238 $ related = $ model ->getRelated ();
217- $ table = $ related ->getTable ().' as ' .$ tableAlias ;
239+ if ($ this ->enableEagerJoinAliases ) {
240+ $ table = $ related ->getTable ().' as ' .$ tableAlias ;
241+ } else {
242+ $ table = $ tableAlias = $ related ->getTable ();
243+ }
218244 $ tablePK = $ model ->getSecondLocalKeyName ();
219245 $ foreign = $ pivotAlias .'. ' .$ tablePK ;
220246 $ other = $ tableAlias .'. ' .$ related ->getKeyName ();
@@ -224,13 +250,21 @@ protected function joinEagerLoadedColumn($relation, $relationColumn)
224250 break ;
225251
226252 case $ model instanceof HasOneOrMany:
227- $ table = $ model ->getRelated ()->getTable ().' as ' .$ tableAlias ;
253+ if ($ this ->enableEagerJoinAliases ) {
254+ $ table = $ model ->getRelated ()->getTable ().' as ' .$ tableAlias ;
255+ } else {
256+ $ table = $ tableAlias = $ model ->getRelated ()->getTable ();
257+ }
228258 $ foreign = $ tableAlias .'. ' .$ model ->getForeignKeyName ();
229259 $ other = ltrim ($ lastAlias .'. ' .$ model ->getLocalKeyName (), '. ' );
230260 break ;
231261
232262 case $ model instanceof BelongsTo:
233- $ table = $ model ->getRelated ()->getTable ().' as ' .$ tableAlias ;
263+ if ($ this ->enableEagerJoinAliases ) {
264+ $ table = $ model ->getRelated ()->getTable ().' as ' .$ tableAlias ;
265+ } else {
266+ $ table = $ tableAlias = $ model ->getRelated ()->getTable ();
267+ }
234268 $ foreign = ltrim ($ lastAlias .'. ' .$ model ->getForeignKeyName (), '. ' );
235269 $ other = $ tableAlias .'. ' .$ model ->getOwnerKeyName ();
236270 break ;
@@ -245,6 +279,19 @@ protected function joinEagerLoadedColumn($relation, $relationColumn)
245279 return $ tableAlias .'. ' .$ relationColumn ;
246280 }
247281
282+ /**
283+ * Enable the generation of unique table aliases on eagerly loaded join columns.
284+ * You may want to enable it if you encounter a "Not unique table/alias" error when performing a search or applying ordering.
285+ *
286+ * @return $this
287+ */
288+ public function enableEagerJoinAliases (): static
289+ {
290+ $ this ->enableEagerJoinAliases = true ;
291+
292+ return $ this ;
293+ }
294+
248295 /**
249296 * Perform join query.
250297 *
0 commit comments