2011-11-30 2 views
2

주식 경고를 위해 adminhtml 섹션을 수정해야합니다. 일반적으로 하나의 제품에 대한이 기능에 의해 경보에 가입 한 등록 된 고객의 검색있다 :Magento가 서로 다른 열을 가진 두 테이블을 합치는 것

protected function _prepareCollection() 
{ 
    $productId = $this->getRequest()->getParam('id'); 
    $websiteId = 0; 
    if ($store = $this->getRequest()->getParam('store')) { 
     $websiteId = Mage::app()->getStore($store)->getWebsiteId(); 
    } 
    $collection = Mage::getModel('productalert/stock') 
     ->getCustomerCollection() 
     ->join($productId, $websiteId); 
    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

이 (내가 이해 한 것에 대해) 다음과 같은 열이 테이블 product_alert_stock에 대한 쿼리합니다

alert_stock_id, customer_id, product_id, website_id, add_date, send_date, send_count, status 

고객 테이블을 사용하여 고객 이름을 검색하십시오.

그럼 우리는 다음과 colums와, (등록되지 않은) 게스트 사용자 product_alert_stock_guest에 대해 유사한 테이블을 만들었습니다

alert_stock_id, guest_email, product_id, website_id, add_date, send_date, send_count, status 

는 차이가 CUSTOMER_ID을 대체 열 guest_email입니다 볼 수 있습니다. 이 두 테이블을 조인 (또는 유사한 작업을 수행) 한 다음 동일한 표에 표시 할 수 있습니까?

고맙습니다

루카


내가 가입하지 않았다 끝에 @JakeTheFish ,하지만 난 정규 재고 경고의 유사한에서 손님 재고 경고 객체를 검색, 나는 이메일을 설정 setData ('email', $ item-> getData ('email'))에 의해 필드를 추가 한 다음 addItem에 의해 $ collection에 추가했습니다. 오류가 있습니다 : Mage :: 예외 ('Mage_Eav', '잘못된 개체를 추가하려고 시도했습니다') 일반 재고 경고 항목에 대한 로그를 작성할 때 정보가 많습니다. 대신 사용자 정의로 http://pastebin.com/z7NpNJrH 게스트 주식 경고 항목, 나는이 : http://pastebin.com/KKcTeQEH 그래서 문제는 내가 추가 Mage_Customer_Model_Customer 인스턴스가 필요하다는 것입니다. 내가 만들 수 하나를 제외한 :

1) 나는 setField 정상적으로 방법 (내가 지금 API 찾고 있어요 그리고 난 그런 아무것도 볼 해달라고)

2) 경우에도와 해당 인스턴스의 속성을 입력 할 수 있습니다 속성을 채울 수 있습니다. 빈 필드를 설정하면 어떻게됩니까?

답변

2

젠토는 등의 방법을 제공합니다

joinAttribute 
joinField 
joinTable 

을 그러나 일부 유사한 ID를 가지고 있어야 테이블에 합류했다. 이 2 개 개의 링크를 기반으로

이 같은 12

시도 뭔가 :

$selectFoo = Mage::getResourceModel('model/foo')->getSelect(); 
$selectBar= Mage::getResourceModel('model/bar')->getSelect(); 
$mergedFooBar = $selectFoo->union(array($selectBar)); 

또는 당신은 컬렉션에 요소를 추가 할 수 있습니다

$collection->addItem($item); 

하지만, 당신은 2 개 개의 다른 수업을 그리고 나는 그들이 하나의 컬렉션에 합병하는 방법을 원하지 않습니다, 당신이 2 개의 엔티티를 통합하고자한다면, 당신은 그 2 subc를 만들어야합니다. 이메일과 customer_id의 차이를 협상하는 제 3의 클래스를 lass. 귀하의 회신에 대해서는

+0

tnx입니다. 가장 좋은 해결책은 하나의 열에 대해서만 다르기 때문에 두 테이블을 조인하는 것입니다.핵심은이 조인을 수행 한 다음 customer 테이블과 함께 다른 조인을 수행 할 경우 customer_id가있는 항목의 측면 efftect는 무엇입니까? – Luke

+0

문제는 guest_email이 customer_id와 연결되어 있지 않다는 것입니다. 그래서 어떤 효과가 있다면 그것은 당신이 전혀 customer_id가없는 항목에있을 것입니다. guest_email과 customer_id의 차이를 협상하는 제 3의 클래스를 제안합니다. 이는 "loadProperModel"과 같은 모델을 가지고 있고 customerEmail 또는 customerName이 될 "고객 식별자"와 같은 필드를 모델에 갖게한다는 것을 의미합니다. 이 같은. –

+0

끝 부분에서 나는 조인을하지 않았지만 일반적인 주식 경고와 비슷한 게스트 스톡 경고 개체를 검색했으며 setData ('email', $ item-> getData ('email'))로 전자 메일 필드를 설정했습니다. , 그리고 난 addItem에 의해 $ collection에 추가했다. 오류가 있습니다 : 'Mage :: exception ('Mage_Eav ','잘못된 개체 추가 시도 ')' – Luke

관련 문제