Метод makeVisible
Метод makeVisible применяется к экземпляру модели Eloquent и позволяет временно сделать видимыми атрибуты, которые были скрыты с помощью свойства $hidden в модели. Метод принимает один или несколько атрибутов в качестве аргументов и возвращает тот же экземпляр модели с изменённой видимостью. Это полезно, когда нужно отобразить скрытые поля в конкретном месте, не изменяя настройки модели глобально.
Синтаксис
<?php
$model->makeVisible($attributes);
?>
Метод принимает один или несколько атрибутов в виде строки или массива строк.
Пример
Допустим, у нас есть модель User со скрытыми полями 'password' и 'email_verified_at' в свойстве $hidden. Давайте временно сделаем поле 'password' видимым для одного пользователя:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $hidden = [
'password',
'email_verified_at',
];
}
?>
<?php
use AppModelsUser;
Route::get('/user/{id}', function ($id) {
$user = User::find($id);
$user->makeVisible('password');
return $user->toArray();
});
?>
Результат выполнения кода:
[
"id" => 1,
"name" => "John Doe",
"email" => "john@example.com",
"password" => "hashed_password_123",
"created_at" => "2026-01-15 10:00:00",
"updated_at" => "2026-01-15 10:00:00"
]
Как видно из результата, поле 'password' стало доступным в массиве, хотя поле 'email_verified_at' по-прежнему скрыто.
Пример
Метод makeVisible может принимать массив атрибутов для одновременного отображения нескольких полей:
<?php
use AppModelsUser;
Route::get('/user/{id}', function ($id) {
$user = User::find($id);
$user->makeVisible(['password', 'email_verified_at']);
return $user->toArray();
});
?>
Результат выполнения кода:
[
"id" => 1,
"name" => "John Doe",
"email" => "john@example.com",
"password" => "hashed_password_123",
"email_verified_at" => "2026-01-15 09:30:00",
"created_at" => "2026-01-15 10:00:00",
"updated_at" => "2026-01-15 10:00:00"
]
Теперь оба скрытых поля стали видимыми при преобразовании модели в массив.
Пример
Метод makeVisible можно вызывать цепочкой для последовательного добавления атрибутов:
<?php
use AppModelsUser;
Route::get('/user/{id}', function ($id) {
$user = User::find($id);
$user->makeVisible('password')->makeVisible('email_verified_at');
return $user->toArray();
});
?>
Результат выполнения кода:
[
"id" => 1,
"name" => "John Doe",
"email" => "john@example.com",
"password" => "hashed_password_123",
"email_verified_at" => "2026-01-15 09:30:00",
"created_at" => "2026-01-15 10:00:00",
"updated_at" => "2026-01-15 10:00:00"
]
Цепочка вызовов даёт тот же результат, что и передача массива, и может быть удобнее в определённых ситуациях.
Пример
Важно отметить, что makeVisible работает только на уровне экземпляра модели и не влияет на другие экземпляры или будущие запросы. Вот пример с двумя пользователями:
<?php
use AppModelsUser;
Route::get('/users', function () {
$user1 = User::find(1);
$user2 = User::find(2);
$user1->makeVisible('password');
$res = [
'user1' => $user1->toArray(),
'user2' => $user2->toArray(),
];
return $res;
});
?>
Результат выполнения кода:
[
"user1" => [
"id" => 1,
"name" => "John Doe",
"email" => "john@example.com",
"password" => "hashed_password_123",
"created_at" => "2026-01-15 10:00:00",
"updated_at" => "2026-01-15 10:00:00"
],
"user2" => [
"id" => 2,
"name" => "Jane Smith",
"email" => "jane@example.com",
"created_at" => "2026-01-15 11:00:00",
"updated_at" => "2026-01-15 11:00:00"
]
]
Как видно из примера, поле 'password' отображается только для $user1, а $user2 остаётся без изменений.
Смотрите также
-
метод
makeHidden,
который временно скрывает атрибуты модели -
метод
toArray,
который преобразует модель в массив -
метод
toJson,
который преобразует модель в JSON -
свойство
$hidden,
которое определяет скрытые атрибуты модели