내가 만들고있는 응용 프로그램에서 사용자는 테이블 간의 관계를 지정할 수 있습니다.DBIx :: Class와 Catalyst를 사용하여 런타임에 관계를 어떻게 추가합니까?
런타임시에만이를 결정하기 때문에 시작할 때 스키마 모듈에서 has_many 또는 belongs_to 관계를 지정할 수 없습니다.
주어진 두 테이블; 시스템 및 장소에 관계를 추가하려면 관계를 추가하여 두 레코드 사이에 합류하십시오.
$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});
그래서 열
fk0
이
id
키 위치 주에 외래 키 매핑 될 것이다 :
나는 아래의 솔루션의 일부를 가지고있다.
향후 관계에 액세스 할 수 있도록 재 등록해야한다는 것을 알고 있지만 알아낼 수는 없습니다.
사용자가 정말로 데이터베이스 스키마를 변경 하시겠습니까? 이는 소스 코드를 편집 할 수있는 것과 완전히 같습니다. "사용자 인터페이스"를 DBIx :: Class로 모델링 할 필요는 없습니다. 원하는 기능을 제공하는 중간 표현을 개발하고 코드 및 데이터베이스 스키마를 고정시키고 자 할 수도 있습니다. – jrockway
DBIx :: Class :: Schema :: Loader도 있습니다. 제어하지 않는 데이터베이스 또는 그와 유사한 것을 추적하는 경우. 그러나 데이터베이스 스키마 변경은 응용 프로그램의 동작을 변경합니다. 코드가 정적이고 데이터베이스 스키마가 동적 인 경우 거의 확실한 문제가 있습니다. – jrockway
실제 데이터베이스에 내 스키마/데이터 사전을 중첩하여 사용할 가능성을 모색 중입니다. 저는 'columns'테이블과 'tables'테이블을 가지고 있습니다. 이것들은 사용자가 선택한 테이블과 컬럼 이름과 속성을 기본 제네릭 테이블 스페이스에 매핑하는 데 사용됩니다. 따라서 사용자는 런타임에 테이블간에 관계를 추가 할 수 있습니다. DBIx를 통해이 관계에 액세스하고 싶습니다. 일반 스키마를 숨기고이 기능이 필요한 중간 인터페이스를 구축하고 있습니다. 감사합니다. -Joe – Joe