2016-06-08 6 views
0

일부 웹 사이트에서 일부 스크립트를 자동화하기 위해 작업 중입니다.Magento의 사용자 지정 특성을 비교하여 제품 정보로드

많은 포럼과 질문을 검토했습니다.
이제 거의 대본을 마쳤지 만 작동하지 않는 작은 것이 있지만 내가 잘못하고있는 것을 생각할 수는 없습니다.

이 스크립트의 목표는 배열 (DB에서 가져온 값)과 동일한 속성 값을 갖는 제품을 얻는 것입니다.

우리는 속성 (EAN)를 선택 : 그래서 여기

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 
require_once('../app/Mage.php'); 
require_once('db.php'); 


Mage::app(); 

$db = db_connection(); 

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

$collection->addAttributeToSelect('ean'); 


$getean = $db->prepare('SELECT ean_l FROM mytable'); 
$getean->execute(); 
$allean = $getean->fetchAll(); 


foreach($allean as $ean) { 

    $collection->addFieldToFilter(array(
     array('attribute'=>'ean','eq'=>'' . $ean['ean_l'] . ''),  
    )); 
    echo 'ean_l: ' . $ean['ean_l'] . '<br>'; 

    foreach ($collection as $product) { 

     echo $product['entity_id']; 

    } 


} 

이 작동 방법은 다음과 같습니다

그래서 여기 내 코드입니다.
데이터베이스에서 모든 ean 번호 목록을 가져옵니다.
목록을 반복하여 모든 제품을 ean 번호와 비교합니다.
그런 다음 컬렉션을 반복하고 해당 제품의 ID를 가져옵니다.
그러나 모든 $product['entity_id']은 273입니다. entity_id는 273이지만 올바른 ean 번호가있는 제품 274도 있습니다. 여기

(이것은 많이 더) 스크립트의 결과입니다 :

result

그래서 왜입니까? 내 추론에서는 ean_l을 모든 루프로 변경하고 속성 값과 동일하게하기 때문입니다.
그리고 컬렉션이 변경되어야합니다. 맞습니까?
어떤 시점에서 적어도 274 이상을 보여서는 안됩니까?

이 질문은 특히 Magento 프로그래머에게는 해당되지 않지만 다른 프로그래머들도 도움을받을 수 있습니다.

답변

0

Magento에는 강력한 필터링과 쿼리가 컬렉션에 포함되어 있습니다. 만족스럽지 않으면 사용자 지정 쿼리를 사용하여 항상 getSelect 함수로 확장 할 수 있습니다. 일부 정보 here.

foreach에 addFieldToFilter을 사용하면 다른 반복 필터링 후에 나머지 값을 필터링합니다. 그래서 좋지 않아. 당신이 ean 값을 기준으로 그룹화 할 경우

$allean = array("of", "ean", "values", "needed", "for", "filtering"); 

$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToSelect('ean'); 
//addAttributeToFilter for EAV collections 
$collection->addAttributeToFilter('ean', array('in' => $allean)); //not addFieldToFilter 
$collection->getColumnValues('entity_id'); 

var_dump($collection); //will output an array of product_ids 

대체, 당신은 getColumnValues을 제거하고 그룹 명령을 실행해야합니다. 추가 정보 here을 찾을 수 있습니다.

getColumnValues을 제거하고 foreach($collection as $product)을 시작하여 수동으로 그룹화하거나 필터링 된 제품으로 원하는 작업을 수행 할 수 있습니다.

관련 문제