如何组合两个search_related结果集

时间:2012-02-22 00:07:48

标签: perl catalyst dbix-class

我有一张地点表:伦敦,东南,米德兰兹等。

我有一张'空缺类别'表:经理,技师等。

我有一个名为'location_id'列的空缺表和一个'vacancy_category_id'列。

所以我想搜索一下,例如,在Midlands的技术员工作或在东南部的经理工作。此查询的基本SQL非常明显。我的问题是如何在Catalyst中处理这个问题,因为它看起来不像使用Catalyst的“search_related”方法。减少了以下结果代码的代码片段。

Vacancy.pm:

 __PACKAGE__->belongs_to( "location", "HABJ::Schema::Result::Location",
             {id => "location_id"},{...});

__PACKAGE__->belongs_to( "vacancy_category", "HABJ::Schema::Result::VacancyCategory",
             {id => "vacancy_category_id"},{...});

Location.pm:

__PACKAGE__->has_many( "vacancies", "HABJ::Schema::Result::Vacancy",
             {"foreign.location_id" => "self.id"},{...});

VacancyCategory.pm:

__PACKAGE__->has_many( "vacancies", "HABJ::Schema::Result::Vacancy",
                     { "foreign.vacancy_category_id" => "self.id" },{...});

在控制器中我可以搜索任何位置或类别的空缺表 使用search_related,但显然我需要能够搜索满足这两个条件的空缺:

my $jobsRS;
# either one of these works. How do you combine them? 
if ($qJobsubtype) {
    $jobsRS = $c->model("HABJ::VacancyCategory") ->
        search ({ name=>$qJobsubtype}) ->
        search_related('vacancies', {});
    my $typeCount = $jobsRS -> count;
    $c->log->debug("$typeCount vacancies of type [$qJobsubtype]");
}

if ($qCounty) {
    $jobsRS = $c->model("HABJ::Location") ->
        search ({ 'me.name'=>$qCounty}) ->
        search_related('vacancies', {});
    my $coCount = $jobsRS -> count;
    $c->log->debug("$coCount vacancies in location [$qCounty]");
}

很明显,你不能期望从不同的表开始组合来自search_related查询的两个结果。所以我问是否有推荐的方法来做到这一点?

在回答dgw的查询时,我现在通过对Vacancy对象的结果集使用链式搜索来解决这个问题:

    $jobsRS = $c->model("HABJ::Vacancy") ->vacs_for_location($qCounty, $c);

    $jobsRS = $jobsRS -> vacs_for_job_subtype($qJobsubtype, $c);

哪种有效,但我不喜欢将上下文对象传递给模型。

谢谢! 还要感谢zpmorgan的整理,并对原版中过多的空白区域道歉。

0 个答案:

没有答案