DBIx::Class
을 사용하여 MySQL 데이터베이스에 액세스하는 Catalyst 응용 프로그램을 개발 중입니다. 응용 프로그램은 파일에 대한 데이터 품질 검사를 수행합니다. 나는 각 열의 검증 작업을 정의하는 다른 테이블, Format
, 한 다음DBIx :: Class :: ResultSet의 열 이름 추상화
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
:
COL_ORDER COL_NAME VALIDATION
1 FOO regex:/^[AB]$/
2 BAR unique_number
3 BAZ regex:/\S/
내가하고 싶은 것은 FileContent
라인을 통해 이동 인 파일은 테이블 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)
다른 표의 값을 기준으로 열을 검색하는 가장 효율적인 방법은 무엇입니까? 열 이름이나 열 위치를 사용할 수 있습니다. 귀하의 도움에 미리 감사드립니다.
나에게 이해가되지 않습니다 검증을위한 관계형 데이터베이스로 파일 가져 오기. 웹 애플리케이션 프레임 워크를 사용하여이를 수행하지 마십시오. 문제를 해결하기 위해 DBIx :: Class와 Catalyst를 선택한 이유를 좀 더 설명 할 수 있습니까? –
@abraxxa, 많은 다른 사용자가 데이터 파일을 시스템에 제출해야합니다. 응용 프로그램은 파일을 점검하고 오류를 정정 할 수 있도록 오류 보고서를 제공합니다. 또한 일부 변환을 수행합니다. 파일이 올 바르면 중앙 데이터베이스에 제출합니다. 파일은 데이터베이스에로드 될 CSV 파일이므로 관계형 데이터베이스는 논리적 인 스토리지 선택과 같습니다. –