2012-11-14 28 views
1

你好,亲爱的社区成员。DBIx类:在结果集中重载new()

我有以下问题。说,我有一个用户表。在编程期间,我为这个表创建了很多搜索查询。然后,后来,我意识到我需要始终只选择“活动”用户,即将“活动”列设置为TRUE。现在,我可以在结果集类中重载new()或者做一些能够全面改变我的所有查询的方法,而不是使用额外的过滤器(active =>“true”)来调整所有查询我需要?

非常感谢。

回答

1

添加一个方法来您的用户ResultSet类返回一个结果集过滤,例如:

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

也可参阅“预定义搜索”的DBIx ::类文档的更多信息。

+0

嗨。感谢您的回答。但这不是我所需要的。我已经有很多现有的查询。现在,我不需要逐个更改它们,而是需要在代码中进行一次更改的地方,这会影响我所有的现有查询。 –

+0

根据我的经验,您后悔当您需要不仅需要活动行的查询时,才会后悔。如果您使用的是Catalyst,那么Chained的完美用例就是将此过滤器应用于位于您的动作链顶端的隐藏结果集。 –

+0

如果你事先知道你需要什么,那么是的,你可以过滤Chained中的结果集,但不是当你需要回顾性地完成时。 –