*/ protected $fillable = [ 'template_id', 'layout_name', 'translation_key', 'values', 'status', 'created_by', 'updated_by', 'lock_version', ]; /** * HasUserOverrides — 사용자가 수정 가능한 필드. * * @var array */ protected array $trackableFields = ['values']; /** * HasUserOverrides — 다국어 JSON 컬럼 sub-key dot-path 단위 보존. * 언어팩 재설치/업그레이드 시 유저가 손댄 로케일 값만 보존됩니다. * * @var array */ protected array $translatableTrackableFields = ['values']; /** * 캐스팅 * * @return array */ protected function casts(): array { return [ 'values' => 'array', 'user_overrides' => 'array', 'lock_version' => 'integer', ]; } /** * 템플릿 관계 * * @return BelongsTo 템플릿 관계 */ public function template(): BelongsTo { return $this->belongsTo(Template::class); } /** * 활성 상태 키만 조회 * * @param Builder $query 쿼리 빌더 * @return Builder 활성 키 쿼리 */ public function scopeActive(Builder $query): Builder { return $query->where('status', 'active'); } }