Skip to content

Commit 8719897

Browse files
committed
feat: relationships allow conditional relation
1 parent 252f194 commit 8719897

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

readme.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,9 @@ protected function toRelationships(Request $request): array
214214
{
215215
return [
216216
'avatar' => AvatarResource::relationship($this->avatar),
217-
// as collection, with condition
217+
// with conditional relationship
218+
'administrator' => $this->when($request->user()->isAdmin(), UserResource::relationship(fn() => $this->administrator),
219+
// as collection, with conditional value
218220
'comments' => CommentResource::relationship(fn() => $this->whenLoaded('comments'))->asCollection(),
219221
// with relationship (allow to include links and meta on relation)
220222
'posts' => PostResource::relationship(fn() => $this->posts)->withLinks(fn() => [

src/Resources/Concerns/Relationships.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ trait Relationships
1414
*
1515
* @param \Illuminate\Http\Request $request
1616
*
17-
* @return array<string, Relationship>|iterable<Relationship>
17+
* @return iterable<string, Relationship|\Illuminate\Http\Resources\PotentiallyMissing>
1818
*
1919
* ```
2020
* return [
@@ -39,8 +39,10 @@ protected function toRelationships(Request $request): iterable
3939
private function requestedRelationships(Request $request): array
4040
{
4141
$relations = [];
42+
$relationships = $this->toRelationships($request);
43+
$relationships = $this->filter($relationships);
4244

43-
foreach ($this->toRelationships($request) as $name => $relationship) {
45+
foreach ($relationships as $name => $relationship) {
4446
$relationship->forRelation($name);
4547

4648
$included = Includes::include($request, $name);

tests/app/Http/Resources/CommentResource.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ protected function toResourceMeta(Request $request): ?iterable
3434
protected function toRelationships(Request $request): iterable
3535
{
3636
return [
37-
'user' => UserResource::relationship(fn() => $this->resource->user)
37+
'user' => $this->when(true, UserResource::relationship(fn() => $this->resource->user)
3838
->withLinks(fn() => [
3939
'self' => "https://api.example.com/comment/{$this->resource->id}/relationships/user",
4040
'related' => "https://api.example.com/comment/{$this->resource->id}/user",
4141
])
42-
->whenIncluded(),
42+
->whenIncluded()),
4343
'post' => PostResource::relationship(fn() => $this->resource->post)
4444
->withLinks(fn() => [
4545
'self' => "https://api.example.com/comment/{$this->resource->id}/relationships/post",

0 commit comments

Comments
 (0)