Как объединить два набора результатов search_related - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть таблица мест: Лондон, Юго-Восток, Мидлендс и т. Д.

У меня есть таблица «Категории вакансий»: менеджер, техник и т. Д.

У меня есть таблица вакансийсо столбцом 'location_id' и столбцом 'vacancy_category_id'.

Поэтому я хотел бы найти, например, рабочие места техников в Мидлендсе или рабочие места менеджеров на юго-востоке.Базовый 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 за исправление, с извинениями за лишние пробелы в оригинале.

...