使用 DBIx::Class 将结果行作为数组获取?

问题描述 投票:0回答:1

是否可以获取普通数组引用作为 DBIx::Class 搜索的行?

我可以做到这一点

my $rs = $db->resultset("SomeTable")->search({});

my $results = $dbh->selectall_arrayref("select * from " . $rs->as_query->$*->[0]);

它确实有效,但看起来很野蛮。

好处是我按顺序排列了列,并且它与列名称无关,这在交叉表的情况下很好。

有没有更清洁的方法? 不,HashRefInflator结果类(或任何基于散列的方法)将不起作用,因为我(没有其他我不知道的技巧)不能保证列顺序 - 因为它们是散列,不能保证关键订购。

perl dbix-class
1个回答
0
投票

您可以向

ResultSet
类添加一个方法,将结果集转换为 arrayrefs 的 arrayref。

package My::Schema::ResultSet::SomeTable;

use strict;
use warnings;

# To ensure the columns are in a nice order
my %column_idxs = (
    column_one => 0,
    column_two => 1
);

sub to_arrayrefs {
    my $self = shift;

    my @rows;
    for ($self->all) {
        my %row = $_->get_inflated_columns;
        my @row;

        for (keys %row) {
            $row[$column_idxs{$_}] = $row{$_};
        }

        push @rows, \@row;
    }

    return \@rows;
}

1;

然后在您的代码中您可以像这样使用它:

my $rows = $db->resultset("SomeTable")->search({})->to_arrayrefs;
© www.soinside.com 2019 - 2024. All rights reserved.