# Laravel model で hidden に設定したカラムを一時解除
User model に複数の hidden 設定していますが、管理者が一覧を取得する際に hidden を解除するようにしたい!
# User Model
スマートで決めていきたいので、hidden を解除してみました。
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, Notifiable, SoftDeletes;
protected $hidden = [
'password',
'created_at',
'updated_at',
'deleted_at',
'email_verified_at',
'token',
'is_active',
'remember_token',
];
protected $casts = [
'password' => 'hashed',
'is_active' => 'boolean',
];
public function isActive()
{
return $this->is_active;
}
# UserController
$user = $request->user();
$is_admin = $user->isAdmin();
if (!$is_admin) {
return response()->json(['result' => false], 404);
}
$users = User::with('company')
->orderBy('id', 'desc')
->paginate($perPage, ['*'], 'page', $page)
->setHidden(['token', 'password', 'remember_token']);
return response()->json($users);
setHidden メソッドを使用して、非表示にしていたカラムを== 一時的に表示する ==ことができます。
# Laravel eloquent 関連
setVisible($attributes) コレクション内の各モデルの全ての visible 属性を一時的に上書きします。
$users = $users->setVisible(['id', 'name']);
setHidden($attributes) コレクション内の各モデルの全ての hidden 属性を一時的に上書きします。
$users = $users->setHidden(['email', 'password', 'remember_token']);