protected function applyBelongsTo(Query $query, Model $model, BelongsTo $belongsTo, $name) { if (isset($this->joinClasses[$name])) { return; } $modelTable = ''; // If the table has already an alias if (str_contains($name, '.')) { $path = explode('.', $name); array_pop($path); $parentPath = implode('.', $path); if (isset($this->joinAliases[$parentPath])) { $modelTable = $this->joinAliases[$parentPath]; } } if (!$modelTable) { $modelTable = $belongsTo->getParent()->getTable(); } $related = $belongsTo->getRelated(); $relatedTable = $related->getTable(); $foreignKey = $belongsTo->getForeignKey(); $otherKey = $belongsTo->getOtherKey(); $alias = $this->joinNameToAlias($name); $joinMethod = $this->getJoinMethod($name); $query->{$joinMethod}("{$relatedTable} AS {$alias}", "{$modelTable}.{$foreignKey}", '=', "{$alias}.{$otherKey}"); $query->distinct(); $this->addQueryColumn("{$modelTable}.{$foreignKey}"); $this->joinClasses[$name] = $belongsTo->getRelated(); $this->joinTable[$name] = $relatedTable; $this->joinAliases[$name] = $alias; }