private function queryJoinBuilder($query, $relation)
{
$relatedModel = $relation->getRelated();
$relatedTable = $relatedModel->getTable();
$parentModel = $relation->getParent();
$parentTable = $parentModel->getTable();
if ($relation instanceof HasOne) {
$relatedPrimaryKey = $relation->getForeignKey();
$parentPrimaryKey = $parentTable . '.' . $parentModel->primaryKey;
return $query->select($parentTable . '.*')->join($relatedTable, $parentPrimaryKey, '=', $relatedPrimaryKey);
} elseif ($relation instanceof BelongsTo) {
$relatedPrimaryKey = $relatedTable . '.' . $relatedModel->primaryKey;
$parentPrimaryKey = $parentTable . '.' . $relation->getForeignKey();
return $query->select($parentTable . '.*')->join($relatedTable, $parentPrimaryKey, '=', $relatedPrimaryKey);
} else {
throw new \Exception();
}
}