У меня есть таблица мест: Лондон, Юго-Восток, Мидлендс и т. Д.
У меня есть таблица «Категории вакансий»: менеджер, техник и т. Д.
У меня есть таблица вакансийсо столбцом '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 за исправление, с извинениями за лишние пробелы в оригинале.