Perl如何漂亮地使用DBIx::Class到return的数据
Perl How to use DBIx::Class to return data beautifully
我是 DBIx::Class 的新手。我正在使用它作为 API 从我的数据库中重新调整数据,我想用 DBIC 重新创建 SELECT * FROM table。有了 DBI,它对我来说效果很好。
return 数据“漂亮”的最佳方法是什么?
我想 return 哈希数组中的数据,例如:
[
{
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 的概念。
我怎样才能只获取所有列的数据?谢谢大家的帮助!
my @rs = map {$_->_column_data} $schema->resultset('Product')->all
?也就是说,按照惯例,带有前导下划线的字段是“私有”字段,可能未记录或记录不足,或者在未来的实现中可能会发生变化,恕不另行通知,您应该小心直接访问它们。
由于 DBIx::Class
的要点是将数据库行转换为对象,因此您应该将结果集视为对象数组。要将其向下转换为适用于 Data::Dumper
的散列,您可以执行类似
的操作
my @rs = map { { name => $_->name, id => $_->id } } $schema->resultset('Product')->all
Data::Dumper 只是泄露了数据结构的内容。这是一个 DB::Schema::Result::Product 对象的核心,它代表 Product table.
的一行
如果你想要一个对象的漂亮输出,你需要向对象询问。你可以打电话给DBIx::Class::Row methods on them. If you want just the row data from the object, use get_columns
or get_inflated_columns
。他们return一个散列,所以你需要参考。
my @rows = map { my %h = $_->get_columns; \%h } @rs;
我能想到的最简单的方法是 get_inflated_columns 方法。
map {{$_->get_inflated_columns}} $rs->all
考虑使用 Data::Dump and if you really want something beautiful, Data::Printer。
我是 DBIx::Class 的新手。我正在使用它作为 API 从我的数据库中重新调整数据,我想用 DBIC 重新创建 SELECT * FROM table。有了 DBI,它对我来说效果很好。
return 数据“漂亮”的最佳方法是什么?
我想 return 哈希数组中的数据,例如:
[
{
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 的概念。
我怎样才能只获取所有列的数据?谢谢大家的帮助!
my @rs = map {$_->_column_data} $schema->resultset('Product')->all
?也就是说,按照惯例,带有前导下划线的字段是“私有”字段,可能未记录或记录不足,或者在未来的实现中可能会发生变化,恕不另行通知,您应该小心直接访问它们。
由于 DBIx::Class
的要点是将数据库行转换为对象,因此您应该将结果集视为对象数组。要将其向下转换为适用于 Data::Dumper
的散列,您可以执行类似
my @rs = map { { name => $_->name, id => $_->id } } $schema->resultset('Product')->all
Data::Dumper 只是泄露了数据结构的内容。这是一个 DB::Schema::Result::Product 对象的核心,它代表 Product table.
的一行如果你想要一个对象的漂亮输出,你需要向对象询问。你可以打电话给DBIx::Class::Row methods on them. If you want just the row data from the object, use get_columns
or get_inflated_columns
。他们return一个散列,所以你需要参考。
my @rows = map { my %h = $_->get_columns; \%h } @rs;
我能想到的最简单的方法是 get_inflated_columns 方法。
map {{$_->get_inflated_columns}} $rs->all
考虑使用 Data::Dump and if you really want something beautiful, Data::Printer。