2010-10-27 8 views
5

me gustaría bastante impresión DBIx :: Resultados :: Clase ResultSet como este:¿Cómo puedo imprimir bastante los resultados de 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 

me encontré clase DBIx :: :: SQLCrosstab formato, pero parece que funciona solamente con las consultas propias.

Respuesta

4

No conozco ningún DBIC bonito imprimir módulos, pero es fácil de implementar desde cualquiera de la miríada de texto, html u otros tipos de módulos de salida tabulares en CPAN.

A continuación es mi ejemplo de trabajo rápida usando 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; 
} 

Esto da salida a la siguiente con mi datos de prueba:

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

/I3az/

1

Si lo que buscas es realmente bastante salida, use el ejemplo de draegtun arriba. Sin embargo, si realmente quiere poder utilizar Data :: Dumper para escupir un objeto DBIx :: Class :: Row sin todos los datos de origen, puede agregar este enlace a su clase de resultado (o mejor aún a un resultado base) clase para todos los resultados de su esquema)

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