src*_*ulo 3 size perl count dbix-class
我正在使用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,
}
);
Run Code Online (Sandbox Code Playgroud)
但是,一旦我得到结果,我想知道已经返回了多少,但我似乎无法找到一个告诉我的方法.有谁知道如何$users
在执行此查询后得到计数?谢谢!
ste*_*enl 11
你可以做:
my $num_users = $users->count;
Run Code Online (Sandbox Code Playgroud)
该对象也在数值上重载以返回计数:
my $num_users = $users + 0;
Run Code Online (Sandbox Code Playgroud)
有关参考,请参阅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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1487 次 |
最近记录: |