当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用外部数据过滤DBIX::Class结果集?》经验,为你挑选了1个好方法。

使用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;
} );

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



1> Aristotle Pa..:

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

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

它们是可组合的.

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

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

封装?(例如,将过滤逻辑隐藏在业务逻辑层中,但在显示逻辑层中启动查询.)然后编写一个自定义ResultSet子类,该子类具有运行查询的访问器并执行所需的过滤.

开销?(例如,您将拒绝大多数结果,因此您不需要为它们创建对象的开销.)然后使用HashRefInflator.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有