Класс DBIx: перегрузка new() в наборе результатов

Здравствуйте уважаемые участники сообщества.

У меня следующая проблема. Скажем, у меня есть таблица пользователей. Во время моего программирования я создаю много поисковых запросов к этой таблице. Затем, позже, я понимаю, что мне нужно всегда выбирать только «активных» пользователей, то есть с «активным» столбцом, установленным на ИСТИНА. Теперь, вместо того, чтобы настраивать все мои запросы к пользовательской таблице с помощью дополнительного фильтра (active => "true"), можно ли перегрузить new() в классе набора результатов или сделать что-то, что глобально изменит все мои запросы в пути Я нуждаюсь?

Заранее большое спасибо.


person Oleksii Andreiev    schedule 14.11.2012    source источник


Ответы (1)


Добавьте в свой класс User ResultSet метод, который возвращает отфильтрованный набор результатов, например:

sub search_active {
    my $self = shift;
    return $self->search({ active => 1 });
}

Также см. документацию DBIx::Class по «предопределенным поискам» для получения дополнительной информации.

person Alexander Hartmaier    schedule 14.11.2012
comment
Привет. Спасибо за Ваш ответ. Но это не совсем то, что мне нужно. У меня уже много существующих запросов. Теперь вместо того, чтобы менять их все один за другим, мне нужно одно место в коде, где я могу внести изменения, которые повлияют на все мои СУЩЕСТВУЮЩИЕ запросы. - person Oleksii Andreiev; 15.11.2012
comment
Исходя из моего опыта, вы сожалеете об этом позже, когда вам понадобится запрос, который требует не только активных строк. Если вы используете Catalyst, это идеальный вариант использования Chained с этим фильтром, примененным к спрятанному набору результатов в верхней части вашей цепочки действий. - person Alexander Hartmaier; 18.11.2012
comment
Если вы заранее знаете, что вам нужно, то да, вы можете отфильтровать набор результатов в Chained, но не тогда, когда вам нужно сделать это задним числом. - person Oleksii Andreiev; 20.11.2012