DBIx::Class::AsFdatのvalueがundefなのを表示したくない
DBIx::Class + Catalyst::View::JSON(2) - ヒルズで働く@robarioの技ログを使ってDBICのハンドルをJSON化だやったーなんて言っていて、その後DBIx::Class::AsFdatを知ってちょっと感動したりしたんですけど、as_fdat()で戻って来た値で、selectしていない値がundefで入っててイヤンな感じなのでそれをなんとかした?のをちょっと書いた。DBのcolumnがmogeとhogeって言うのがあったとしてselect moge from tableってやると、{moge=>'value', hoge => undef}みたいな感じになってしまうのを{moge => 'value'}みたいにしたい。
package DBIx::Class::SelectedColAsFdat; use strict; use warnings; use base 'DBIx::Class'; our $VERSION = 0.01; sub as_fdat { my $self = shift; my $data = $self->{_column_data}; my $ret; for my $col (keys %$data) { $ret->{$col} = $self->$col; } return $ret; } 1;
ほぼそのままですがな。
スキーマに問い合わせて、全てのcolumnをforで回してるのでundefが入る模様なので、selectされた項目だけを取り出してやろうと思ったけどdumpしたらそのままな内部データがあったのであとはdeflateした。書きながら思ったけどこれrelationあったら動かないんじゃね?とか、remove_columnでcolumn消せば良いんじゃね、とか、もしかしてDBICかCatalystにこんな機能あるんじゃね?思ったけどそれはそのとき考える。