2010-04-07 2 views
1

내 탐색 모델에서 쿼리를 실행하는 함수를 정의했으며 쿼리를 생성/실행하는 "Zendy"방법이 더 있는지 궁금합니다. 내가 사용하고있는 쿼리는 Bill Karwin에서 another thread here에 대한 임의의 레코드 순서 설정을 제안했습니다. 준비된 문을 사용하여 시도했지만 SIGN() 함수의 값이 인용 된.Zend 데이터베이스 어댑터 - 복잡한 MySQL 쿼리

MySQL 용 PDO 어댑터를 사용하고 있습니다.

/** 
* 
*/ 
public function setPosition($parentId, $oldPosition, $newPosition) 
{ 
    $parentId = intval($parentId); 
    $oldPosition = intval($oldPosition); 
    $newPosition = intval($newPosition); 
    $this->getAdapter()->query(" 
     UPDATE `navigation` 
     SET `position` = CASE `position` 
      WHEN $oldPosition THEN $newPosition 
      ELSE `position` + SIGN($oldPosition - $newPosition) 
      END 
     WHERE `parent_id` = $parentId 
     AND `position` BETWEEN LEAST($oldPosition, $newPosition) 
      AND GREATEST($oldPosition, $newPosition) 
    "); 
    return $this; 
} 
+0

* Zendy * way please – Gordon

+0

"Zendy"는 위와 같이 직접 쿼리를 작성하는 대신 Zend가 제공하는 추상화를 사용함을 의미합니다. – Sonny

답변

4

당신은 사용할 수 Zend_Db_Select 및/또는 Zend_Db_Expr, 하지만 그것이 것처럼 작동하는 경우, 변경하지 마십시오. ZF 구성 요소가 존재하거나 코드를 더 많이 만들었 기 때문에 ZF 구성 요소를 사용하지 않아도됩니다. Zendy. 특정 문제를 해결할 때 사용하십시오.

모든 추상화로 인해 코드가 약간 더 느려질 수 있습니다. 많이는 아니지만 필요하지 않을 수도 있습니다. 가능한 한 많은 ZF 구성 요소를 사용하기 위해 굴복 한 프로젝트에서 내 경험으로 이야기 할 수 있습니다. 돈을 지불하지 않았고 나중에 많은 것을 리팩토링하는 것을 발견했습니다.

+0

특히 성능 문제가있는 특정 ZF 구성 요소가 있습니까? – Sonny

+1

@Sonny 예, Zend_Date는 DateTime에 비해 성능이 좋지 않았으므로 특정 로캘의 날짜 형식을 지정하는 데만 사용됩니다. 또한 __call 인터페이스를 통해 사용되는 경우 PluginBroker, Zend_Loader 및 ViewHelpers와 같은 일반적인 용의자가 있습니다. 또 다른 잘못된 선택은 다양한 XML 파일을 처리하기 위해 Zend_Config를 사용하는 것이 었습니다. 나쁜 구성 요소는 아니지만 DOM의 경우보다 적절하고 간편합니다. 나는 또한 Zend_Filter 또는 Zend_Validate에 대해 filter_var를 사용하고있다. 이것을 분명히하기 위해서 : 나는 ZF를 좋아하고, 적절하게 사용하면 훌륭하다고 생각합니다. – Gordon