2012-04-10 4 views
0

나는 온라인에서 꽤 많은 연구를 테스트했지만 아직 행운이 없다. 누구도이 문제에 직면 했습니까? 대신에 저를주는Doctrine - 쿼리에서 이상한 이동 괄호

$q = Doctrine_Query::create() 
->update('PckFolder') 
->set('id_path', "CONCAT(?, RIGHT(id_path, LENGTH(id_path)-?))", array($newPath, $lenOld)) 
->where("id_path like '$oldPath%'"); 

// and I print the query out 
$qstr = $q->getSqlQuery(array($newPath, $lenOld)); 

:

UPDATE pck_folder SET id_path = CONCAT(?, RIGHT(id_path, LENGTH(id_path)-?)) WHERE (id_path like '1/2//%') 

교리가 내게 준 :

말은, 내가 좋아하는 설정 교리 쿼리가

UPDATE pck_folder SET id_path = CONCAT(?, RIGHT(id_path, LENGTH(id_path-?))) WHERE (id_path like '1/2//%') 

이 부분을 유의하시기 바랍니다 RIGHT(id_path, LENGTH(id_path)-?)

답변

1

(참고 : Doctrine 1.2를 사용하고 있다고 가정합니다. Doctrine 2.0을 아직 사용하지 않았습니다.)

Doctorrine_Query에서 update()를 구현할 때 여러 가지 문제점이 발견되었습니다. 기본적으로 가장 간단한 쿼리 만 사용하면 구문 분석기가 잘못된 쿼리 나 잘못된 쿼리를 생성합니다. 예를 들어 업데이트 내에서 하위 선택을 처리 할 수 ​​없습니다.

원시 SQL 쿼리를 작성하거나 효율이 떨어지지 만 완전한 기능을 사용하지 않는 방법을 사용하십시오. Doctrine_Query를 사용하여 업데이트하려는 레코드를 선택한 다음 반복하고 PHP에서 필드를 설정 한 다음 save()를 호출하십시오. 각각.

그런데 UPDATE 쿼리와 Doctrine을 사용하면 큰 고티 (GOTCHA)가 생겨서 많은 경우에 해결 방법을 사용할 수 있습니다. 즉, 귀하 또는 귀하의 플러그인이 귀하의 모델 내에서 멋진 Doctrine 후크 메소드를 사용했지만 해당 레코드에 영향을주는 SQL 레벨 업데이트를 실행하면, 후크가 자동으로 우회됩니다. 응용 프로그램에 따라 비즈니스 논리 처리가 망가질 수 있습니다.

+0

감사합니다 ... –