Laravel - API Resources - Merging Conditional Attributes
Sometimes you may have several attributes that should only be included in the resource response based on the same condition. In this case, you may use the mergeWhen
method to include the attributes in the response only when the given condition is true
:
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
$this->mergeWhen(Auth::user()->isAdmin(), [
'first-secret' => 'value',
'second-secret' => 'value',
]),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
Again, if the given condition is false
, these attributes will be removed from the resource response before it is sent to the client.
The mergeWhen
method should not be used within arrays that mix string and numeric keys. Furthermore, it should not be used within arrays with numeric keys that are not ordered sequentially.