繁体   English   中英

DBIx :: Class:ResultSet获取大小

[英]DBIx::Class:ResultSet get size

我正在使用DBIx :: Class来检索结果,如下所示:

my $users = $c->model('DB::User')->search(
    { active_yn => 'y', client_yn => 'n' },
    {   
        columns => [qw/id first_name last_name username email/],
        order_by => ['last_name'],
        page     => ($c->req->param('page') || 1), 
        rows     => 20, 
    }   
); 

但是,一旦我得到结果,我想知道已经返回了多少,但我似乎无法找到一个告诉我的方法。 有谁知道在执行此查询后如何获取$users的数量? 谢谢!

你可以做:

my $num_users = $users->count;

该对象也在数值上重载以返回计数:

my $num_users = $users + 0;

有关参考,请参阅https://metacpan.org/module/DBIx::Class::ResultSet#count

更新:为什么结果集需要发出单独的查询来获取计数。

请注意结果集类的主要描述:

ResultSet是存储表示查询的一组条件的对象。 它是DBIx :: Class的主干(即真正重要/有用的位)。

创建ResultSet时,不会在数据库上执行SQL,它只存储创建查询所需的所有条件。

...

只有在调用这些方法时,才会对数据库执行ResultSet表示的查询:“find”,“next”,“all”,“first”,“single”,“count”。

换句话说,结果集在查询之前没有计数。

当你使用next迭代结果集时,它将保留它从数据库中读取的记录的藏匿处,但它会丢弃那些记录,因为它会将它们提供给你,这意味着它无法从你拥有的记录中获得数量。读。 如果你想这样做,你需要要求它们被缓存。

my $resultset = $schema->resultset('Artist')->search( undef, { cache => 1 } );
my @records = $resultset->all;
my $count = $resultset->count; # this uses the count of the cached records

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM