[英]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.