2017-05-09 1 views
0

내 질문에 대해 stackoverflow에 몇 가지 게시물이 있지만 모든 응답이 저에게 효과가있는 것처럼 보입니다. 이것이 게시 이유입니다. 이리. 내가 created_at과 updated_at와 클래스가Symfony 오류 : 문자열에 구성원 함수 형식()을 호출하십시오.

, 모두가 내 세터에서 날짜 시간 값

을 기대하고 내가 가진 : 나는

$this->setUpdatedAt(strtotime($stimestamp)); 
다음 사용할 때

$date = new \DateTime('now'); 
$stimestamp = $date->format('M-d-Y H:i:s'); 
$this->setUpdatedAt($stimestamp); 

같은 오류가 발생합니다

다음 오류가 발생합니다. 오류 : 문자열의 멤버 함수 format()을 호출합니다.

My Oracle 데이터베이스는 datetime이 'DD-MON-YYYY'다음과 같을 것으로 예상하지만 doctrine은 UNIX 형식으로 생각하는 'Y-d-M'으로 쿼리를 생성합니다.

올바른 날짜/시간 값 및 형식을 전송할 수 있다고 어떻게 해결할 수 있습니까?

+0

제대로 작동해야합니다. 'var_dump ($ date); 때 당신은 무엇을 얻습니까? – aynber

+0

덤프가 적절한 값을 표시하고 있지만 곧 $ this-> setUpdatedAt (strtotime ($ stimestamp))를 호출하면 오류가 발생합니다. – CookieMonster

+0

created_at 및 updated_at에 datetime 값을 예상했지만 DateTime :: format은 문자열을 반환합니다. , 그래서 setUpdatedAt() 메소드 구현은 어떻게 생겼습니까? –

답변

0

문제를 해결할 수 있으면이 도구를 사용하십시오 (물론 로캘에 따라 형식 문자열을 변경하는 것을 잊지 마세요).

$em = $this->get('doctrine.orm.default_entity_manager'); 
    $dbh = $em->getConnection(); 
    $sth = $dbh->prepare("ALTER SESSION SET NLS_TIME_FORMAT = 'HH24:MI:SS' NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS' NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS TZH:TZM'"); 
    $sth->execute(); 
+0

내 생각에 우리는 여기에 올바른 길을 가고 있다고 생각한다. $ em = $ this-> getDoctrine() -> getManager(); $ em-> persist ($ object); $ em-> flush(); – CookieMonster

+0

@CookieMonster 응답이 업데이트되었습니다 ... –

+0

다른 옵션은 사용자 지정 매핑 형식을 만든 다음 표준 Doctrine datetime 대신 사용하는 것입니다. http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#custom-mapping-types를 확인하십시오. –

0

나는 Stackoverflow에서 다른 게시물의 해결책을 찾았지만 불행히도 링크를 잃어 버렸습니다. Jan Rydrych의 답은 올바른 길 이었지만 컨트롤러 클래스에 솔루션을 적용하고 싶지 않았으며 대신 글로벌하게 만들고 싶었습니다.

응용 프로그램/config.services.yml

oci8.listener: 
     class: Doctrine\DBAL\Event\Listeners\OracleSessionInit 
     arguments: 
      - { NLS_TIMESTAMP_TZ_FORMAT: "YYYY-MM-DD HH24:MI:SSTZH:TZM" } 
     tags: 
      - { name: doctrine.event_listener, event: postConnect } 

(가) 위의 문제를 해결 :

심포니에서, 서비스에서 나는 다음을 추가했습니다.

도움을 주셔서 감사합니다.

관련 문제