2010-10-27 10 views
5

Mi piacerebbe pretty-print DBIx :: risultati Class :: ResultSet come questo:Come posso stampare abbastanza risultati DBIx :: Class?

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

ho trovato classe DBIx :: :: Format SQLCrosstab ma sembra funzionare solo con le query proprie.

risposta

4

Non so di alcun DBIC pretty print moduli ma è facile da implementare da una miriade di testi, html o altri tipi di moduli di output tabulari su CPAN.

Qui di seguito è il mio rapido esempio di lavoro utilizzando 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; 
} 

Emette il seguente con il mio dati di test:

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

/I3az/

1

Se siete alla ricerca di veramente bella uscita, usa l'esempio di draegtun sopra. Tuttavia se vuoi davvero poter usare Data :: Dumper per sputare un oggetto DBIx :: Class :: Row senza tutti i dati di origine puoi aggiungere questo hook alla tua classe di risultato (o meglio ancora a un risultato di base classe per tutti i risultati dello schema)

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