2010-10-27 22 views
5

Tôi muốn khá-in DBIx :: quả Class :: ResultSet như thế này:Tôi có thể in DBIx như thế nào :: Kết quả lớp học?

my $schema = MyDatabase::Main->connect('dbi:SQLite:db/example.db'); 
my $rs = $schema->resultset('Track')->all() 
# then print $rs with all of those feilds 

tôi thấy lớp DBIx :: SQLCrosstab :: Format nhưng nó dường như chỉ làm việc với các truy vấn riêng.

Trả lời

4

Tôi không biết về bất kỳ mô-đun DBIC khá in nhưng dễ thực hiện từ bất kỳ vô số văn bản, html hoặc các loại mô-đun đầu ra dạng bảng khác trên CPAN.

Dưới đây là ví dụ làm việc nhanh chóng của tôi sử dụng Text::Table

use 5.012; 
use warnings; 
use List::MoreUtils 'zip'; 
use Text::Table; 

# my database with Album schema from DBIx::Class::Manual::Intro 
use MySchema; 
my $db  = MySchema->connect("DBI:SQLite:myschema_db"); 
my $album = $db->resultset('Album'); 

# get column names for the Album table 
my @cols = $album->result_source->columns; 

# create header with these column names 
my $table = Text::Table->new(header(@cols)); 

# add each Album row to table output 
while (my $cd = $album->next) { 
    $table->add(map { $cd->get_column($_) } @cols); 
} 

print $table; # => tabular text output 

# adds | separator between header labels 
sub header { 
    my @sep = (\' | ') x @_; 
    zip @_, @sep; 
} 

này kết quả đầu ra sau với dữ liệu thử nghiệm của tôi:

albumid | artist  | title   | rank | 
1  | Lou Reed | Transformer |  | 
2  | Lou Reed | Berlin   |  | 
3  | David Bowie | Ziggy Stardust |  | 
4  | Japan  | Tin Drum  |  | 

/I3az/

1

Nếu bạn đang tìm kiếm thực sự khá đầu ra, sử dụng ví dụ của draegtun ở trên. Tuy nhiên nếu bạn thực sự chỉ muốn có thể sử dụng Data :: Dumper để nhổ ra một đối tượng DBIx :: Class :: Row mà không cần tất cả dữ liệu nguồn, bạn có thể thêm hook này vào lớp kết quả của bạn (hoặc tốt hơn là một kết quả cơ bản) cho tất cả các kết quả lược đồ của bạn)

sub _dumper_hook { 
    $_[0] = bless { %{ $_[0] }, _source_handle=>undef }, ref($_[0]); 
} 
$Data::Dumper::Freezer = '_dumper_hook';