2011-10-18 2 views
0

각 주문과 함께 제품 속성을 저장하는 솔루션을 찾고 있습니다. 본질적으로 프론트 엔드에서 특정 로트의 제품을 포함하는 주문을 검색 할 수있는 각 제품의 고유 항목 로트 번호를 저장할 필요가 있습니다. 나의 초기 생각은 제품 속성으로 이것을 수행하고 각 제품에 속성을 순서대로 저장하는 것이었다.Magento에서 주문과 함께 제품 속성 저장

아무에게도 더 나은 솔루션이 있습니까, 아니면이 솔루션을 구현하기위한 올바른 방향으로 나를 지적 할 수 있습니까?

편집 : 아직도 내가 로트 번호는 제품 속성해야합니다 동의이

답변

0

에 대한 해결책을 찾고 있지만 두 번 저장할 필요가 없습니다. 나중에 필요할 때 주문 테이블에 가입하십시오. 정보가 최신 상태로 유지됩니다 (주문시의 정보를 알고 싶지 않은 경우,이 경우 모두 잘못됨).

불행히도 주문 테이블은 EAV가 아니라 평평하게되어 있으므로 속성을 잘 처리하지 마십시오. 컬렉션의 joinAttribute() 메서드는 스텁입니다. 이것으로 주위를 돌아볼 수 있습니다 query patterns library (자기 승격 면책 조항, 나는 속성 함수를 작성 했으므로 여기에서 사용하고 있으며 작업을 다시하고 싶지는 않습니다.) 그리고 나서 당신에게 특정한 클래스로 확장합니다.

class Knectar_Select_Product_Lot extends Knectar_Select_Product 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
     $this->joinAttribute('lots', 'catalog_product', 'lot_number', 
      'products.entity_id', 0, 'lot_number' 
     ); 
    } 

    public static function enhance(Varien_Db_Select $select, $tableName, $condition, $columns = null, $type = self::LEFT_JOIN) 
    { 
     $select->_join(
      $type, 
      array($tableName => new self()), 
      $condition, 
      $columns ? $columns : 'lot_number' 
     ); 
    } 
} 

enhance() 기능 만이 열입니다하여 필터를 호출 할 필요가 하드 비트 않습니다.

$orderItems = Mage::getResourceModel('sales/order_item_collection'); 
Knectar_Select_Product_Lot::enhance($orderItems->getSelect, 'lots', 'lots.product_id = main_table.product_id'); 
$orderItems->addFieldToFilter('lot_number', 'ABC123'); 

당신이 관리자 그리드의 컬렉션을 사용하는 경우 다음은 열 필터가 당신을 위해 addFieldToFilter()을 할 것입니다.