[Cologne-pm] Catalyst, TT and DBIx::Class
A. Pagaltzis
pagaltzis at gmx.de
Wed May 9 07:14:27 PDT 2007
Hi quarky,
* quarky at quantentunnel.de <quarky at quantentunnel.de> [2007-05-09 14:35]:
> In TT steht dann um auf die einzelnen Zeilen des ResultSets
> zuzugreifen:
>
> [% FOREACH book IN books -%]
> [% book.title %]
> [% END %]
>
> Wenn ich aber in TT sage:
>
> [% USE Dumper(Indent=1) -%]
> [% Dumper.dump(books) %]
>
> dann bekomme ich irgendein Array of Objects ( meiner Meinung
> nach ein Array of ResultSet ).
Wenn ich DBIC richtig verstehe, ist dass ein Array von `::Row`-
Instanzen, nicht ein Array von `::ResultSet`-Instanzen. Die
bekämst du, wenn du es so schriebst:
$c->stash->{books} = $c->model('MyAppDB::Book')->all;
Dann wäre `books` selber ein `::ResultSet`, du könntest aber dann
nicht mehr mit einer FOREACH-Schleife drüber iterieren sondern
müsstest WHILE nehmen. (Da kriegst du aber den schönen Iterator
nicht, mit dem du Dinge wie `loop.last` oder `loop.odd` abfragen
kannst.)
> Jedenfalls nichts was sich in TT meiner Ansicht nach mittels
> foreach Schleife und Hash-Keys erschließen ließe.
Das heisst nicht, dass das Beispiel falsch ist. TT verbirgt den
Unterschied zwischen Hashes und Objekten. `book.title` kann
sowohl `$book->{title}` als auch `$book->title()` bedeuten.
> Ich suche nämlich nach einer Möglichkeit ein beliebiges
> ResultSet in Tabellenform anzuzeigen und brauche dazu die
> Spaltennamen. Ich dachte ich könnte mir einfach über
> users.first.keys.sorted die Spaltennamen erschleichen und dann
> damit die Tabellenspalten benennen und später auf die Felder
> zugreifen.
Du kriegst mit `::Row::get_columns` die Zeile als Hash (keine
Referenz), oder mit `::ResultSource::columns` eine Liste von
Spaltennamen. An die passende `::ResultSource` kommst du mit
`::ResultSet::result_source` bzw `::Row::result_source` ran.
Gruss,
--
Aristoteles Pagaltzis // <http://plasmasturm.org/>
More information about the Cologne-pm
mailing list