'datetime', 'last_login_at' => 'datetime', 'options' => 'array', 'deleted_at' => 'datetime', 'password' => 'hashed', // ← 이걸 쓰면 자동 해싱 ]; protected $hidden = [ 'password', 'remember_token', 'two_factor_secret', 'two_factor_recovery_codes', 'two_factor_confirmed_at', 'deleted_at', ]; public function userTenants() { return $this->hasMany(UserTenant::class); } public function userTenant() { return $this->hasOne(UserTenant::class)->where('is_default', 1); } public function userRoles() { return $this->hasMany(UserRole::class); } public function userTenantById($tenantId) { return $this->hasOne(UserTenant::class)->where('tenant_id', $tenantId); } public function files() { return $this->morphMany(File::class, 'fileable'); } public function tenantsMembership(): BelongsToMany { return $this->belongsToMany(Tenant::class, 'user_tenants', 'user_id', 'tenant_id') ->as('membership') // pivot 대신 membership으로 표기 ->withPivot(['is_active', 'is_default', 'joined_at', 'left_at', 'deleted_at']) ->wherePivotNull('deleted_at'); // 소프트삭제 제외 } }