DBIx::Class
MySQL データベースへのアクセスに使用する Catalyst アプリケーションを開発しています。アプリケーションは、ファイルのデータ品質チェックを実行します。ファイルはテーブルにロードされますFileContent
:
FILE_ID LINE_NUMBER FOO BAR BAZ
-----------------------------------
1 1 A 99 Blah
1 2 B 11 Blargh
1 3 A 4 Sproing
1 4 B 7 Sproing
1 5 B 10 Doink
Format
次に、各列の検証アクションを定義する別のテーブル があります。
COL_ORDER COL_NAME VALIDATION
1 FOO regex:/^[AB]$/
2 BAR unique_number
3 BAZ regex:/\S/
私がやりたいことは、特定のファイルを 1 行ずつFileContent
調べて、すべてのルールを各行に適用することです。Format
my @lines = $c->model('DB::FileContent')->search({file_id => 1});
my @format = $c->model('DB::Format')->search();
foreach my $line (@lines)
{
foreach my $column (@format)
{
#Get the field matching this column from $line.
#e.g. for first $column get $line->foo()
}
}
ただし、フォーマットの現在の列に一致する行から列を効率的に取得する最善の方法がわかりません。列にアクセスする通常の方法は、 などのメソッドを使用すること$line->foo
です。しかし、変数が変数の場合はどうすればよいfoo
でしょうか?
私はこれをしたいとは思わない:
eval "$line->${$column->col_name}";
get_column は知っていますが、これは行から単一の値を取得するのに効率的ですか?
$line->get_column($column->col_name)
他のテーブルの値に基づいて列を取得する最も効率的な方法は何ですか? 列名または列位置のいずれかを使用できます。よろしくお願いします。