2013-05-30 4 views
2

이 코드의 잘못된 점은 무엇입니까? 나는 펄의 DateTime 모듈을 DBIx::Class과 함께 사용하고있다.Perl DBIx :: Class DateTime 빼기

my $entry_rs = $schema->resultset('table_name')->search_rs(    
    {                  
     table_id  => $row->table_id,          
     utc_timestamp => { '<', \'DateTime->now()->subtract(days => 180)' }, 
    },                  
)->all;                  

저는 PostgreSQL을 사용하고 있습니다. utc_timestamp 유형은 타임 스탬프입니다. 내가 계산하면 DateTime->now()->subtract(days => 180) 변수에 저장하고 값을 대체하면 작동합니다.

오류 :

DBIx::Class::Storage::DBI::_dbh_execute(): DBI Exception: DBD::Pg::st execute failed: ERROR: column "datetime" does not exist ??

당신은 데이터베이스에 펄 코드를 리터럴 SQL을 전달하는

답변

4

도와주세요. 이것은 작동하지 않습니다. 이런 식으로 뭔가를 시도 :

my $dt  = DateTime->now()->subtract(days => 180); 
my $parser = $schema->storage->datetime_parser; 
my $entry_rs = $schema->resultset('table_name')->search_rs(    
    {                  
     table_id  => $row->table_id,          
     utc_timestamp => { '<', $parser->format_datetime($dt) }, 
    },                  
)->all; 

이 코드는 데이터베이스의 DateTime::Format 클래스 적절한를 검색 할 datetime_parser in DBIx::Class::Storage::DBI를 사용합니다. 그런 다음 해당 클래스의 format_datetime을 호출하여 DateTime 개체를 DB로 전달할 수있는 문자열로 변환합니다.

+0

@nwellnhoff - 정확히 내가 한 일입니다. 그래도 고마워. 나는 거기에서 perl 코드를 속일 수있는 방법이 있다고 생각하고 있었다. .. 고맙지 만 .. – NullException

관련 문제