우리는 한쪽에 여러 유형의 객체를 처리 할 수있는 링크 테이블을 가지고 있으며 has_many를 사용하여 링크 테이블에 이러한 객체 중 하나를 가져 오는 방법을 찾을 수 없습니다.고정 조인 조건으로 DBIx :: Class 관계를 만들려면 어떻게해야합니까?
예 : 링크 테이블에는 다음이 포함됩니다 내가 대응을 얻을 수 없었다
Resource->has_many(links => 'Link', 'resource_id');
하지만 : 자원 측면에서의 관계를 구축
id link_id link_table resource_id 1 1 page 3 2 1 page 5 3 2 page 3 4 1 not_page 1
충분히 쉽다 페이지 측과의 관계 :
Page->has_many(links => 'Link', 'link_id');
는
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'page'});
이 (그다지 놀라운 일이 아니었다)는 '잘못된 확인해 콘드의 발 페이지'오류를주는 not_page 링크를 얻을 것입니다.
'오류가 발생했습니다.'오류가 발생합니다. 안으로 백 슬래시를 던지면 도움이되지 못했습니다.
DBIx::Class::Relationship::Base는 말한다 :
:조건이 같은 내가 거기에서 여러 가지 다른 옵션을 시도
와 테이블 간의 조인의 SQL::Abstract 스타일 표현 될 필요가
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => {'=', 'page'}});
하지만 전혀 성공하지 못했습니다. 난 항상 값 '페이지'를 포함하는 페이지 테이블에 다른 필드를 추가 한 경우
나는
Page->has_many(links => 'Link', {'foreign.link_id' => 'self.id', 'foreign.link_table' => 'self.what_table_am_i'});
을 할 수 있지만, 거의 최적의 솔루션 없습니다.
링크 테이블을 각 유형별로 별도로 분할하는 것도 가능하지만 DBIx :: Class에 적응하기 위해 고려중인 기존 프로젝트이며 테이블을 여러 개로 분할하는 다른 장소가있을 수 있습니다 다른 테이블은 가치보다 더 번거 롭습니다.
Page->has_many(__all_links => 'Link', 'link_id');
sub links {
shift->__all_links({link_table => 'page'});
}
이것은 당신이 필요합니다 여러 테이블이있는 경우 DBIx :: 클래스의 구성 요소로 전환 꽤 쉬운 것입니다 :
는 "has_many"의 반대편에 "belongs_to"를 원하십니까? – jrockway
has_many가 더 중요하기 때문에 필자는 필요한 것보다 더 많은 합병증을 추가하지 않기로 결정했다. 브라이언의 대답이 belongs_to 경우에 대해 수정 될 수 있기를 바랍니다. – Cebjyre