# 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']);

参考 Laravel Eloquent Collections (opens new window)

2024-04-02
  • laravel

同じタグを持つ記事をピックアップしました。