내 응용 프로그램에서 결과 집합 체인을 구현하려고합니다. 나는 그런 방식으로 체인을 호출 할 때DBIx :: 프리 페치에서 동일한 테이블을 사용하는 클래스 체인 결과
package Schema::ResultSet::Category;
use base 'DBIx::Class::ResultSet';
sub with_translation {
my ($self, $lang) = @_;
$self->search(
{
'language.code' => $lang,
},
{
prefetch => {
'category_i18ns' => 'language'
}
}
);
}
sub with_products {
my ($self, $lang) = @_;
$self->search(
{
'language.code' => $lang,
},
{
prefetch => {
'products' => {
'product_i18ns' => 'language',
},
},
},
);
}
sub with_categories {
my ($self, $lang) = @_;
$self->search(
{
'language.code' => $lang,
},
{
prefetch => {
'parent' => {
'category_i18ns' => 'language'
},
},
}
);
}
sub with_account {
my ($self) = @_;
$self->search(
undef,{
prefetch => ['account'],
});
}
sub display {
my ($self) = @_;
$self->result_class('DBIx::Class::ResultClass::HashRefInflator');
my @return = $self->all;
return \@return;
}
: 여기
내 결과 집합 클래스의 몇 가지 방법이 있습니다my @categories = $self->db->resultset('Category')->with_translation($lang)->with_products($lang)->display;
DBIx :: 클래스가 하나 포함 SELECT 쿼리를 생성 WHERE 절 :
SELECT [...] WHERE (language.code = ?): 'en'
속성 및 조건에 따라 예상되는 결과 descr DBIx :: Class :: ResultSet 문서화. 하지만 어떻게 각각의 관련 'language.code'열에 대해 여러 WHERE 절을 사용하여 쿼리를 생성 할 수 있습니까? 예,이 같은 : 지금까지 내가 이해
SELECT [...] WHERE ((language.code = ?) AND (language_2.code = ?)): 'en', 'en'
는, 문제는 검색 조건이 그래서 현재의 '언어'별칭을 검색하고에서 모든 검색 조건에서 사용하는 데 필요한 체인 통화 중에 통합되고 있다는 점이다 chain 요소가 있지만 DBIx :: Class는 이러한 기능을 제공하지 않습니다. 당신이 당신의 최종 버전을 변경하는 경우
-> 검색은 매개 변수를 병합합니다. 모든 메소드가 'language.code'와 동일한 해시 키를 검색하므로 하나만 수행합니다. where 절에 여러 조건이 있기를 원하면 검색시 category_i18ns.code와 같은 테이블 이름을 사용해야합니다. – mikew
합리적으로 들리 네요. 고맙습니다! – romel