2010-04-28 5 views
1

PARAMS 통과 실행 나는 쿼리의 서버를 확인 교리 DQL

$q->update('product') 
->set('quantity','?') 
->where('id=?'); 
$q->execute(array(20,5)); 

교리

이 DQL을 사용하고 인수가 '그런가 이유는 생성 된 SQL

UPDATE product SET quantity = '20', updated_at = '5' 
WHERE (id = '2010-04-26 14:34); 

그래서 나는 알 필요가 올바른 장소에 있지 않습니까?

답변

0

나는 며칠 전 나 자신과 똑같은 버그로 스스로 잡혔다. Timestampable 동작의 버그로 인해 발생했다고 생각합니다. 나는 당신이 Product 모델에서 활성화되어 있다고 생각하고 Doctrine은 updated_at 필드를 일련의 필드에 추가하여 (SET) 업데이트 한 다음 SQL 매개 변수가있는 사실에주의를 기울이지 않습니다 (where 절에서).). Timestampable이 관련되지 않기 때문에 SELECT를 수행 할 때이 버그가 발생하지 않습니다.

내가 찾은 유일한 해결책은 execute의 배열 매개 변수가 아닌 쿼리를 빌드 할 때 매개 변수를 제공하는 것이고 Doctrine은 혼동을 일으키지 않습니다. 이처럼 : 서로 다른 값으로 동일한 쿼리를 여러 번 실행해야하는 경우

$q->update('product') 
->set('quantity', 20) 
->where('id = ?', 5); 
$q->execute(); 

그러나, 당신은 별도의 성능 이점이 단계를 실행 & 준비 잃는 것. 이것이 유일한 해결책 인 것처럼 보입니다.

성능 손실없이 잠재적으로 더 나은 해결책 : 익명 대신 명명 된 매개 변수를 사용하면 버그가 나타나지 않았 으면 좋겠습니까? 자리 표시 자. Doctrine이 명명 된 매개 변수를 지원하는 방법은 다음과 같습니다. http://www.doctrine-project.org/documentation/manual/1_2/en/dql-doctrine-query-language

EDIT : 이후 이름이 지정된 매개 변수로 대체 방법을 시도했지만 불행히도 버그가 남아 있습니다. Doctrine은 동일한 쿼리에서 명명 된 매개 변수와 익명 매개 변수를 섞어 사용할 수 없다는 오류를 표시합니다. 이것은 정말로 오래 전 IMO를 고쳐야 만했습니다.