'integer', 'is_active' => 'boolean', 'created_at' => 'datetime', 'updated_at' => 'datetime', 'deleted_at' => 'datetime', ]; protected $hidden = [ 'deleted_by', 'deleted_at', ]; /** * 페이지와 연결된 섹션 관계 목록 (링크 테이블 기반) */ public function sectionRelationships() { return $this->hasMany(EntityRelationship::class, 'parent_id') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->where('child_type', EntityRelationship::TYPE_SECTION) ->orderBy('order_no'); } /** * 페이지와 직접 연결된 필드 관계 목록 (링크 테이블 기반) */ public function fieldRelationships() { return $this->hasMany(EntityRelationship::class, 'parent_id') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->where('child_type', EntityRelationship::TYPE_FIELD) ->orderBy('order_no'); } /** * 페이지에 연결된 섹션들 조회 (링크 테이블 기반) */ public function linkedSections() { return ItemSection::whereIn('id', function ($query) { $query->select('child_id') ->from('entity_relationships') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->where('parent_id', $this->id) ->where('child_type', EntityRelationship::TYPE_SECTION); }); } /** * 페이지에 직접 연결된 필드들 조회 (링크 테이블 기반) */ public function linkedFields() { return ItemField::whereIn('id', function ($query) { $query->select('child_id') ->from('entity_relationships') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->where('parent_id', $this->id) ->where('child_type', EntityRelationship::TYPE_FIELD); }); } /** * 페이지의 모든 관계 목록 조회 (섹션 + 직접 연결된 필드) */ public function allRelationships() { return $this->hasMany(EntityRelationship::class, 'parent_id') ->where('parent_type', EntityRelationship::TYPE_PAGE) ->orderBy('order_no'); } }