是否可以获取普通数组引用作为 DBIx::Class 搜索的行?
我可以做到这一点
my $rs = $db->resultset("SomeTable")->search({});
my $results = $dbh->selectall_arrayref("select * from " . $rs->as_query->$*->[0]);
它确实有效,但看起来很野蛮。
好处是我按顺序排列了列,并且它与列名称无关,这在交叉表的情况下很好。
有没有更清洁的方法? 不,HashRefInflator结果类(或任何基于散列的方法)将不起作用,因为我(没有其他我不知道的技巧)不能保证列顺序 - 因为它们是散列,不能保证关键订购。
您可以向
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;