1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

fillableとhiddenのそれぞれの役割

1
Posted at

fillablehiddenはLaravelモデルで全く別の目的で使うプロパティです。それぞれの役割を具体例付きで説明します。

$fillableの役割(マスアサインメントのホワイトリスト)

「どのカラムなら、create/update時に一括代入を許可するか」を指定

class User extends Model
{
    protected $fillable = ['name', 'email'];  // この2つだけ代入OK
}

具体例:これが動く・動かない

// ✅ OK(fillableにあるから)
User::create(['name' => '太郎', 'email' => 'taro@example.com']);  // 保存される

// ❌ 無視される(fillableにない)
User::create([
    'name' => '太郎', 
    'email' => 'taro@example.com',
    'password' => 'secret'  // ← 保存されない!
]);
  • *目的:**悪意あるユーザーによるpasswordroleの書き換えを防ぐセキュリティ。

$hiddenの役割(JSON/配列変換時の非表示リスト)

「toArray(), toJson()時に隠すカラム」を指定

class User extends Model
{
    protected $fillable = ['name', 'email', 'password'];
    protected $hidden = ['password', 'remember_token'];  // API出力から除外
}

具体例:API出力の見え方の違い

$user = User::create([
    'name' => '太郎',
    'email' => 'taro@example.com', 
    'password' => 'secret123'
]);

// APIで返す時
return $user;  // JSON形式で返す

// ❌ hiddenがない場合(危険!)
{
    "id": 1,
    "name": "太郎",
    "email": "taro@example.com",
    "password": "secret123",       パスワード丸見え
    "remember_token": "abc123..."
}

// ✅ hiddenありの場合(安全)
{
    "id": 1,
    "name": "太郎",
    "email": "taro@example.com"    パスワード非表示
}

使い分けまとめ表

プロパティ 目的 影響する場面 例として含めない方がいいカラム
$fillable マスアサインメント許可 create()update()fill() passwordroleis_admin
$hidden JSON/配列出力非表示 toJson()toArray()response()->json() passwordremember_tokenpivot

実装例(Userモデル)

class User extends Model
{
    // 1. create/updateで許可するカラム(セキュリティ)
    protected $fillable = [
        'name',
        'email',
        'password',  // ハッシュ化は別途処理
    ];
    
    // 2. API出力で隠すカラム(プライバシー)
    protected $hidden = [
        'password',
        'remember_token',
    ];
    
    // 3. 日付として扱うカラム
    protected $dates = ['deleted_at'];
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?