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