Skip to content

Commit

Permalink
hasMany and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
railken committed Apr 6, 2024
1 parent 2277d5d commit 15f7f31
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/Services/HasRelations.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public function createRelation(ManagerContract $manager, Bag $relation)

// BelongsTo/MorphTo

if ($relation->type === 'MorphToMany' || $relation->type === 'MorphMany') {
if ($relation->type === 'MorphToMany' || $relation->type === 'MorphMany' || $relation->type === 'HasMany') {
$view = $this->dataViewManager->findOrCreateOrFail([
'name' => $this->enclose($name).'.page.show.'.$enclosed,
'type' => 'component',
Expand Down
53 changes: 52 additions & 1 deletion src/Services/HasTabSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,58 @@ public function serializeTabMorphMany(string $name, array $relation): iterable

$query = $inversed
? sprintf('%s.id eq {{ containerResource.id }}', $inversed)
: sprintf('id in (0, {{ containerResource.%s|mapByKey("id").join(",") }})', $nameComponent);
: sprintf('%s eq {{ containerResource.id }}', $relation['foreignKey']);

$params = [
'name' => $nameComponent,
'extends' => $relatedEnclosed.'.data.iterator.table',
'options' => [
'containerInclude' => [$nameComponent],
'query' => $query,
'fixed' => [
'attributes' => $fixed,
],
],
];

return $params;
}

public function serializeTabHasMany(string $name, array $relation): iterable
{
$relationManager = app('amethyst')->findManagerByName($relation['related']);

$foreignKey = str_replace('_id', '', $relation['foreignKey']);

$fixed = [
$foreignKey => [
'path' => 'containerResource',
],
];

$relatedName = $relation['related'];

foreach ($relation['scope'] as $scope) {
$column = $scope['column'];
$columns = explode('.', $column);
if ((count($columns) > 1) && $columns[0] === $relation['table']) {
$columns = [$columns[1]];
}

$column = implode('.', $columns);

$fixed[$column] = $scope['value'];
}

$nameComponent = $this->enclose($name, $relation['name']);

$relatedEnclosed = $this->enclose($relatedName);

$inversed = app('eloquent.mapper')->getInversedRelation($name, $relation['related'], $relation['name']);

$query = $inversed
? sprintf('%s.id eq {{ containerResource.id }}', $inversed)
: sprintf('%s eq {{ containerResource.id }}', $relation['foreignKey']);

$params = [
'name' => $nameComponent,
Expand Down

0 comments on commit 15f7f31

Please sign in to comment.