问题描述
我是DBIx :: Class的新手。我将其用于API以从我的数据库重新调出数据,我想与DBIC重新创建SELECT * FROM表。使用DBI,对我来说效果很好。
返回“美丽”数据的最佳方法是什么?
我想以散列数组形式返回数据:
[
{
id => 123,name => 'name',....
}
]
但使用my @rs = $schema->resultset('Product')->all; return \@rs;
。我没有得到我想要的输出。
使用Data :: Dumper检查对象时,我得到以下信息:
$VAR1 = bless( {
'_column_data' => {
'name' => 'test','id' => 123'
},'_result_source' => $VAR1->{'_result_source'},'_in_storage' => 1
},'DB::Schema::Result::Product' );
我确定我误解了DBIC的概念。
我如何仅获取所有列的数据?谢谢大家的帮助!
解决方法
Data :: Dumper只是溢出数据结构的胆量。这就是DB :: Schema :: Result :: Product对象的精髓,它代表Product表的单行。
如果要从对象输出漂亮的图像,则需要向对象询问。您可以在它们上调用DBIx::Class::Row方法。如果只需要对象中的行数据,请使用get_columns
或get_inflated_columns
。它们返回哈希值,因此您需要参考。
my @rows = map { my %h = $_->get_columns; \%h } @rs;
,
我认为最简单的方法是get_inflated_columns方法。
map {{$_->get_inflated_columns}} $rs->all
考虑使用Data::Dump,如果您真的想要漂亮的东西,请Data::Printer。
,my @rs = map {$_->_column_data} $schema->resultset('Product')->all
?就是说,按照惯例,下划线前导的字段是“私有”字段,可能没有文档记录或文档不足,或者在将来的实现中可能会更改,恕不另行通知,因此您应提防直接访问它们。
由于DBIx::Class
的意义是将数据库行转换为对象,因此应将结果集视为对象数组。要将其转换为适用于Data::Dumper
的哈希,您可以执行类似
my @rs = map { { name => $_->name,id => $_->id } } $schema->resultset('Product')->all