Skip to content

Commit d8f57f8

Browse files
committed
fixes
1 parent 651d153 commit d8f57f8

File tree

2 files changed

+69
-6
lines changed

2 files changed

+69
-6
lines changed

src/Fields/BelongsToMany.php

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,28 @@ public function mapRelated(Request $request, Model $model, Model $related): arra
238238

239239
$pivot->setRelation('related', $related);
240240

241-
return parent::mapRelated($request, $model, $pivot);
241+
return [
242+
'id' => $related->getKey(),
243+
'model' => $pivot,
244+
'url' => $this->relatedUrl($pivot),
245+
'fields' => $this->resolveFields($request)
246+
->subResource(false)
247+
->authorized($request, $related)
248+
->visible('index')
249+
->mapToDisplay($request, $pivot),
250+
'abilities' => $this->mapRelatedAbilities($request, $model, $related),
251+
];
252+
}
253+
254+
/**
255+
* Get the related URL.
256+
*/
257+
public function relatedUrl(Model $related): string
258+
{
259+
return match (true) {
260+
$related instanceof Pivot => sprintf('%s/%s', $this->modelUrl($related->pivotParent), $related->getKey()),
261+
default => parent::relatedUrl($related),
262+
};
242263
}
243264

244265
/**
@@ -316,15 +337,17 @@ public function toCreate(Request $request, Model $model): array
316337

317338
$pivot->setRelation('related', $relation->make());
318339

319-
return array_merge(parent::toCreate($request, $model), [
340+
return array_merge($this->toSubResource($request, $model), [
341+
'template' => 'root::resources.form',
320342
'title' => __('Attach :model', ['model' => $this->getRelatedName()]),
321343
'model' => $pivot,
322344
'action' => $this->modelUrl($model),
323345
'method' => 'POST',
346+
'uploads' => $this->hasFileField($request),
324347
'fields' => $this->resolveFields($request)
325348
->subResource(false)
326349
->authorized($request, $pivot)
327-
->visible('relation.create')
350+
->visible('create')
328351
->mapToInputs($request, $pivot),
329352
]);
330353
}
@@ -340,7 +363,26 @@ public function toShow(Request $request, Model $model, Model $related): array
340363

341364
$pivot->setRelation('related', $related);
342365

343-
return parent::toShow($request, $model, $pivot);
366+
return array_merge($this->toSubResource($request, $model), [
367+
'template' => 'root::resources.show',
368+
'title' => $this->resolveDisplay($related),
369+
'model' => $pivot,
370+
'action' => $this->relatedUrl($pivot),
371+
'fields' => $this->resolveFields($request)
372+
->subResource(false)
373+
->authorized($request, $related)
374+
->visible('show')
375+
->mapToDisplay($request, $pivot),
376+
'actions' => $this->resolveActions($request)
377+
->authorized($request, $related)
378+
->visible('show')
379+
->standalone(false)
380+
->mapToForms($request, $pivot),
381+
'abilities' => array_merge(
382+
$this->mapRelationAbilities($request, $model),
383+
$this->mapRelatedAbilities($request, $model, $related)
384+
),
385+
]);
344386
}
345387

346388
/**
@@ -354,6 +396,22 @@ public function toEdit(Request $request, Model $model, Model $related): array
354396

355397
$pivot->setRelation('related', $related);
356398

357-
return parent::toEdit($request, $model, $pivot);
399+
return array_merge($this->toSubResource($request, $model), [
400+
'template' => 'root::resources.form',
401+
'title' => __('Edit :model', ['model' => $this->resolveDisplay($related)]),
402+
'model' => $pivot,
403+
'action' => $this->relatedUrl($pivot),
404+
'method' => 'PATCH',
405+
'uploads' => $this->hasFileField($request),
406+
'fields' => $this->resolveFields($request)
407+
->subResource(false)
408+
->authorized($request, $related)
409+
->visible('update')
410+
->mapToInputs($request, $pivot),
411+
'abilities' => array_merge(
412+
$this->mapRelationAbilities($request, $model),
413+
$this->mapRelatedAbilities($request, $model, $related)
414+
),
415+
]);
358416
}
359417
}

src/Fields/MorphToMany.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@ public function fields(Request $request): array
4141
->unless($this->allowDuplicateRelations, function (Builder $query) use ($model): Builder {
4242
return $query->whereNotIn(
4343
$query->getModel()->getQualifiedKeyName(),
44-
$this->getRelation($model->pivotParent)->select($query->getModel()->getQualifiedKeyName())
44+
$this->getRelation($model->pivotParent)
45+
->select($query->getModel()->getQualifiedKeyName())
46+
->whereNot(
47+
$query->getModel()->getQualifiedKeyName(),
48+
$model->getAttribute($model->getRelatedKey())
49+
)
4550
);
4651
});
4752
})->hydrate(function (Request $request, MorphPivot $model, mixed $value): void {

0 commit comments

Comments
 (0)