Conditionally Hide Model Attributes in Laravel Using makeHidden()

Hide sensitive fields dynamically without modifying your model permanently.

  • 26 May, 2026
  • 38 Views

Conditionally Hide Model Attributes in Laravel Using makeHidden()

In Laravel, models often contain sensitive fields:

  • email
  • 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 


Share: