'integer', 'order_no' => 'integer', 'is_required' => 'boolean', 'is_common' => 'boolean', 'is_active' => 'boolean', 'is_locked' => 'boolean', 'display_condition' => 'array', 'validation_rules' => 'array', 'options' => 'array', 'properties' => 'array', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', 'locked_at' => 'datetime', ]; /** * API 응답에서 제외할 컬럼 (내부용) */ protected $hidden = [ 'deleted_by', 'deleted_at', // 내부용 매핑 컬럼 - API 응답에서 제외 'source_table', 'source_column', 'storage_type', 'json_path', ]; /** * 이 필드가 연결된 섹션들 조회 (entity_relationships 기반) */ public function linkedSections() { return ItemSection::whereIn('id', function ($query) { $query->select('parent_id') ->from('entity_relationships') ->where('parent_type', EntityRelationship::TYPE_SECTION) ->where('child_type', EntityRelationship::TYPE_FIELD) ->where('child_id', $this->id); }); } /** * 이 필드가 직접 연결된 페이지들 조회 (링크 테이블 기반) */ public function linkedPages() { return ItemPage::whereIn('id', function ($query) { $query->select('parent_id') ->from('entity_relationships') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->where('child_type', EntityRelationship::TYPE_FIELD) ->where('child_id', $this->id); }); } /** * 이 필드의 모든 부모 관계 목록 조회 */ public function allParentRelationships() { return EntityRelationship::where('child_type', EntityRelationship::TYPE_FIELD) ->where('child_id', $this->id); } /** * 시스템 필드 여부 확인 (DB 컬럼과 매핑된 필드) */ public function isSystemField(): bool { return ! is_null($this->source_table) && ! is_null($this->source_column); } /** * 컬럼 저장 방식 여부 확인 */ public function isColumnStorage(): bool { return $this->storage_type === 'column'; } /** * JSON 저장 방식 여부 확인 */ public function isJsonStorage(): bool { return $this->storage_type === 'json'; } }