I have the following resource being returned:
{
"id": "b93244c5-0c1e-4388-bd61-fd577b5c7c57",
"state": 3,
"createdAt": "2022-08-03T13:58:27.000000Z",
"attendee": {
"id": "5a0f730a-dcc7-4937-9a6a-bb9fe4a9285c",
"about": "...",
"firstName": "Bobby",
"lastName": "Spencer",
"timezone": "Atlantic/Azores",
"username": "at-sed-2748",
"avatar": null,
"fullName": "Bobby Spencer"
}
}
I would like to add email
attribute to attendee
ONLY if the logged user meets some condition. I assume that I would use additional
but for some reason its not working:
class MeetupAttendeeResource extends JsonResource
{
public function toArray($request)
{
/** @var Meetup $meetup */
$meetup = $request->meetup;
/** @var User $loggedUser */
$loggedUser = $request->user();
/** @var MeetupAttendeeService $meetupAttendeeService */
$meetupAttendeeService = app()->make(MeetupAttendeeService::class);
$attendee = (new UserResource($this->attendee));
if ($meetupAttendeeService->canSeeEmail($loggedUser, $meetup)) {
$attendee->additional(['email' => $this->attendee->email]);
}
return [
'id' => $this->id,
'state' => $this->state->value,
'createdAt' => $this->created_at,
'attendee' => $attendee,
'meetup' => new MeetupResource($this->whenLoaded('meetup')),
];
}
}
Why it's not adding email
field? I have tried hardcoding it:
if (true) {
$attendee->additional(['email' => $this->attendee->email]);
}
but still, it doesn't get added.