Conditionally Hide Model Attributes in Laravel Using makeHidden()
In Laravel, models often contain sensitive fields:
- phone
- internal notes
- admin flags
Normally, developers use:
protected $hidden = [
'password',
];
But sometimes you only want to hide fields temporarily.
Laravel provides:
makeHidden()
Basic Usage
$user->makeHidden('email');
Now:
return $user;
👉 email will not appear in response.
Multiple Attributes
$user->makeHidden([
'email',
'phone',
'salary',
]);
Real Project Example
Admin sees full data:
return $user;
Public API hides sensitive fields:
return $user->makeHidden([
'email',
'phone',
]);
Why This Is Better
Without makeHidden():
- Multiple transformers/resources needed
- Manual array manipulation
- Duplicate response logic
With makeHidden():
- Quick runtime control
- Cleaner responses
- No permanent model changes
Bonus: Reverse with makeVisible()
$user->makeVisible('token');
Perfect for:
- Admin panels
- Debug tools
- Internal APIs
Why This Is Useful
It helps you:
- Dynamically control API output
- Hide sensitive data safely
- Avoid duplicate response structures
- Keep models flexible
When to Use It
Use makeHidden() when:
- Building public APIs
- Returning conditional responses
- Handling role-based visibility