2012-04-23 32 views
5

Tôi đang tạo báo cáo chứng khoán trong quản trị viên và có mọi thứ hoạt động cho đến thời điểm này, ngoại trừ việc tôi dường như không thể lọc trên cột được nối.Lọc cột đã tham gia

Tôi đã tham gia thông tin cổ phiếu, sử dụng thông tin sau để lấy bộ sưu tập của mình.

$collection = Mage::getModel('catalog/product')->getCollection() 
       ->addAttributeToSelect('name') 
       ->addAttributeToSelect('sku') 
       ->addAttributeToSelect('price') 
       ->setStoreId($storeId); 
$collection->addFieldToFilter('type_id', 'simple'); 

// Add on the stock qty information 
$collection->getSelect()->join(array('stock'=>'ccmg_cataloginventory_stock_item'), 'e.entity_id = stock.item_id', array('stock.qty')); 

Điều này khiến màn hình hiển thị nhưng bạn không thể lọc hoặc sắp xếp cột. Tôi giả sử vì các tùy chọn không được chuyển trở lại tham gia. Tuy nhiên, các cột khác có thể được sắp xếp và lọc và dữ liệu phù hợp được kéo trở lại và hiển thị.

Tôi đã tìm kiếm nhưng hầu hết các bài đăng đều có trên diễn đàn Magento từ năm 2008 và tôi đang sử dụng 1,6! Mọi gợi ý đều tuyệt!

Trả lời

11

Sau khi tham gia, bạn cần phải thêm lĩnh vực tham gia vào mảng _map khai báo trong Varien_Data_Collection_Db, ví dụ:

$this->_map['fields']['stock_qty'] = 'stock.qty'; 

[sửa] Như đã chỉ ra bởi @ sh4dydud3_88, bạn có thể làm điều này:

$collection->addFilterToMap('stock_qty', 'stock.qty'); 

sẽ thêm trường stock_qty để lọc. Sau đó, bạn có thể lọc với

$collection->addFieldToFilter('stock_qty', array('gt', 10)); 

Một ví dụ khác:

class Company_Mohe_Model_Resource_Im_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract 
{ 
protected function _construct() 
{ 
    $this->_init('mohe/im'); 
} 


public function joinIhe() 
{ 
    $this->getSelect()->join(array('ihe' => $this->getTable('mohe/ihe')), 
            'main_table.mic_inst_id = ihe.im_id', 
            array('ihe_name'=>'name', 'ihe_ifms_id'=>'ifms_id')); 
    //$this->_map['fields'] = array('ihe_name'=>'ihe.name', 'ihe_ifms_id'=>'ihe.ifms_id'); //incorrect method 
    $this->addFilterToMap('ihe_name', 'ihe.name'); //correct method, see comment by @sh4dydud3_88       
    return $this; 
} 
} 
+0

tôi không thể xác minh nếu làm việc này như tôi không làm việc trên dự án này nữa. –

+2

Nó hoạt động, nhưng vì tôi không mở rộng Mage_Core_Model_Resource_Db_Collection_Abstract '_map ['fields']' là riêng tư/được bảo vệ. addFilterToMap đã làm các trick. '$ collection-> addFilterToMap ('ihe_name', 'ihe.name');' –

+0

'' 'addFieldToMap''' trên thực tế là cách chính xác. '' '$ this -> _ map ['fields']' '' thực sự ghi đè lên mảng '' '_map''', vì vậy nó trở nên rườm rà nếu chúng ta có nhiều hơn một cột để ánh xạ. – kiatng

0

Sau khi tham gia chỉ cần sử dụng để sắp xếp kết quả của bạn

$collection->getSelect() 
    ->join(array('stock'=>'ccmg_cataloginventory_stock_item'), 'e.entity_id = stock.item_id', array('stock.qty')) 
    ->order('stock.qty ASC'); 
Các vấn đề liên quan