'array', 'is_active' => 'boolean', ]; // 관계: 상위 코드 public function parent() { return $this->belongsTo(self::class, 'parent_id'); } // 관계: 하위 코드들 public function children() { return $this->hasMany(self::class, 'parent_id'); } /** * 코드 그룹과 코드로 라벨(name) 조회 * * @param string $codeGroup 코드 그룹 (예: 'delivery_method') * @param string|null $code 코드값 (예: 'direct') * @return string 라벨 (없으면 코드값 반환) */ public static function getLabel(string $codeGroup, ?string $code): string { if (empty($code)) { return ''; } $commonCode = static::query() ->where('code_group', $codeGroup) ->where('code', $code) ->where('is_active', true) ->first(); return $commonCode?->name ?? $code; } /** * 코드 그룹의 전체 코드 목록 조회 (code => name 배열) * * @param string $codeGroup 코드 그룹 * @return array [code => name] 형태의 배열 */ public static function getCodeMap(string $codeGroup): array { return static::query() ->where('code_group', $codeGroup) ->where('is_active', true) ->orderBy('sort_order') ->pluck('name', 'code') ->toArray(); } }