簡體   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