'boolean', 'last_used_at' => 'datetime', ]; /** * 플랫폼 상수 */ public const PLATFORM_IOS = 'ios'; public const PLATFORM_ANDROID = 'android'; public const PLATFORM_WEB = 'web'; /** * 사용자 관계 */ public function user(): BelongsTo { return $this->belongsTo(User::class); } /** * 테넌트 관계 */ public function tenant(): BelongsTo { return $this->belongsTo(Tenant::class); } /** * Scope: 활성 토큰만 */ public function scopeActive($query) { return $query->where('is_active', true); } /** * Scope: 플랫폼별 필터 */ public function scopePlatform($query, string $platform) { return $query->where('platform', $platform); } /** * Scope: 특정 사용자의 토큰 */ public function scopeForUser($query, int $userId) { return $query->where('user_id', $userId); } }