2010-10-27 19 views
5

Je voudrais jolie impression DBIx :: résultats Class :: ResultSet comme celui-ci:Comment puis-je imprimer les résultats 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 

Je trouve DBIx :: SQLCrosstab :: Format classe, mais il semble fonctionner uniquement avec ses propres requêtes.

Répondre

4

Je ne connais aucun DBIC jolis modules d'impression mais il est facile à implémenter à partir de la myriade de textes, html ou d'autres types de modules de sortie tabulaires sur CPAN.

Ci-dessous mon exemple de travail rapide à l'aide 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; 
} 

Ce produit les éléments suivants avec mes données de test:

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

/I3az/

1

Si vous cherchez vraiment assez sortie, utilisez l'exemple de draegtun ci-dessus. Cependant, si vous voulez vraiment utiliser Data :: Dumper pour cracher un objet DBIx :: Class :: Row sans toutes les données source, vous pouvez ajouter ce hook à votre classe de résultat (ou mieux encore à un résultat de base classe pour tous les résultats de votre schéma)

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