加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何使用外部数据过滤DBIX :: Class结果集?

发布时间:2020-12-16 06:28:30 所属栏目:大数据 来源:网络整理
导读:使用 DBIx::Class,我有一个结果集,需要通过SQL无法生成的数据进行过滤.我需要做的是有效地等同于这个假设的例子: my $resultset = $schema-resultset('Service')-search(%search);my $new_resultset = $resultset-filter( sub { my $web_service = shift;
使用 DBIx::Class,我有一个结果集,需要通过SQL无法生成的数据进行过滤.我需要做的是有效地等同于这个假设的例子:

my $resultset     = $schema->resultset('Service')->search(%search);
my $new_resultset = $resultset->filter( sub {
    my $web_service = shift;
    return $web_service->is_available;
} );

阅读文档让我不知道如何完成这样的策略.

解决方法

由于DBIC结果集的设计目标,您无法真正做到:

>他们编译成SQL并运行单个查询,这些查询不会比您要求结果时更早.
>它们是可组合的.

允许通过在Perl端运行的代码进行过滤会使得实现这些属性非常繁琐,并且会隐藏这样的结果集在编写时实际运行N个查询的事实.

无论如何,你为什么要这样?为什么简单地检索结果并自己过滤它们不够?

>封装? (例如,将过滤逻辑隐藏在业务逻辑层中,但在显示逻辑层中启动查询.)然后编写一个自定义ResultSet子类,该子类具有运行查询的访问器并执行所需的过滤.>开销? (例如,您将拒绝大多数结果,因此您不需要为它们创建对象的开销.)然后使用HashRefInflator.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读