首页 > 解决方案 > Perl 如何使用 DBIx::Class 漂亮地返回数据

问题描述

我是 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 的概念。
如何仅获取所有列的数据?谢谢大家的帮助!

标签: perldbidbix-class

解决方案


Data::Dumper 只是泄露了数据结构的核心。这就是代表 Product 表的单行的 DB::Schema::Result::Product 对象的核心。

如果你想要一个对象的漂亮输出,你需要询问对象。您可以对它们调用DBIx::Class::Row方法。如果您只需要对象中的行数据,请使用get_columnsor get_inflated_columns。他们返回一个哈希,所以你需要参考。

my @rows = map { my %h = $_->get_columns; \%h } @rs;

推荐阅读