2012-12-12 3 views
0

직접 SQL을 사용하는 스크립트에서 magento 모델 및 컬렉션을 사용하는 스크립트를 변환 할 수있는 방법이 있습니까?SQL로 변환 Magento 모델 기반 스크립트

나는 모든 것이 가능하다는 것을 알고있다. :) 질문은 내 스크립트에서 쿼리를 가져 와서 직접 DB 스크립트에서 다시 사용할 수있는 쉽고 직관적 인 방법에 관한 질문이다.

왜? 더 빠른 스크립트가 있기를 바랍니다.

코드 예?

이 스크립트를 가정 :
function getProd() { 

$collection = Mage::getModel('catalog/product') 
     ->getCollection() 
     ->addTierPriceData(); 

return $collection; 
} 
function getTier($prod) { 

$t_1 = false; 

$_tierPrices = $prod->getTierPrice(); 

if ($_tierPrices) { 

    $_firstTier = array_slice($_tierPrices, 0, 1); 

    if (isset($_firstTier[0])) 
     $t_1 = $_firstTier[0]['price']; 
} 

return $t_1; 
} 

function exec() { 

$collection = getProd(); 

$i = 0; 

foreach ($collection as $prod) { 

    $class = ($i % 2 == 0) ? '' : 'class="odd"'; 
    $t1 = 0; 
    if ($t1 = getTier($prod)) { 

      $prod = mage::getModel('catalog/product')->load($prod->getId()); 

      $prod->setPrice($t1); 
      $prod->save(); 
      if ($safe) 
       set_time_limit(60); 
     } 
    } 
} 

exec(); 

은 기본적으로 내가 계층의 가격이 모든 제품을 처리하고 계층 가격으로 제품의 주요 가격을 대체하고 싶습니다.

이 스크립트는 12000 개 제품에서 9 시간 이상 소요되므로 SQL 접근 방식은 빠를 수 있지만 DB 구조를 연구해야한다고 생각합니다.

중 하나는 당신이 필요로하는 모두가 볼 수있는 간단한 오프 솔루션의 경우

답변

0

(만 쿼리 모음을 인쇄하는 것이 뭔가 더) 좋을 것 PHP/SQL 스크립트에서이 변환 할 수있는 좋은 방법이있다 그래서 경우 무엇 쿼리는 echo $collection->getSelect();과 같은 것을 할 수 있어야합니다. 컬렉션의 getSelect 함수는 Zend_Select 개체를 반환합니다. 이 클래스에는 현재 빌드 된 쿼리에 대한 sql을 반환하는 __toString 함수가 있습니다.

+0

죄송합니다. 질문을 업데이트하기 만하면됩니다. 그냥 $ collection-> getSelect()보다 좀 더 구조적으로 대답하십시오. wellcome입니다 ... 예를 들어 업데이트 쿼리는 어떻습니까? – WonderLand