/** * Add select with alias to query from "belongs to" relation * * @param Builder $query * @param BelongsTo $relatedModel */ private function addBelongsToSelect(Builder $query, BelongsTo $relatedModel) { $query->getQuery()->join($relatedModel->getRelated()->getTable(), $relatedModel->getQualifiedForeignKey(), '=', $relatedModel->getQualifiedOtherKeyName()); }
protected function joinBelongsToRelation(Relations\BelongsTo $relation, $type) { $table = $relation->getRelated()->getTable(); $foreignKey = $relation->getQualifiedForeignKey(); $localKey = $relation->getQualifiedOtherKeyName(); $this->query->join($table, $foreignKey, '=', $localKey, $type); }
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; }