2013-10-02 28 views
1

作爲解決我的問題sorting collections by subcategory, an attribute and by productname中解釋我的「按子類別排序產品集合」問題的後續想法,我曾想過將AS表達式添加到所選字段的集合。將AS表達式添加到getCollection()中的選定列

我要實現什麼(SQL明智)是這樣的:

SELECT field1, 'some string' as 'category_name' FROM ...

所以我想我可以使用addExpressionFieldToSelect的方法鏈的類別名稱字符串動態地添加到產品採集。

對於具備以下條件:

// ... 
$_products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left') 
     ->addAttributeToSelect('*') 
     ->addExpressionFieldToSelect('\'some category name\'', 'AS', 'category_name') 
     ->addAttributeToFilter('status', 1) 
     ->addAttributeToFilter('visibility', 4) 
     ->addAttributeToFilter('is_saleable', array('like' => '1')) 
     ->addAttributeToFilter('category_id', $_subcategory_finset_ids) 
     ->addAttributeToSort('ws_geschmack', 'ASC') 
     ->addAttributeToSort('name', 'ASC'); 
// ... 

但與我得到一個錯誤:

Fatal error: Call to undefined method Mage_Catalog_Model_Resource_Product_Collection::addExpressionFieldToSelect() ...

簡短的解釋:其實我不能夠通過子產品集合排序類別(字符串)我首先查詢父類別的所有子類別(有序),並在循環內查詢這些子類別的所有產品(直到最深層次)以獲取每個子類別和子子類別的產品子列表。爲了完全理解我的問題,請參考我上面提到的問題。

這只是一個嘗試,我不知道這一切是否真的有效。作爲現在的黑客,我只是試圖與AS expression字段保持外部循環的類別名稱稍微接近一點。然後,我可以合併這些集合,並擁有最終產品集合。

如果有更簡單的方法,請讓我知道。

任何幫助非常感謝!

更新

而不是使用addExpressionFieldToSelect就可以使用這個的:

$_products->getSelect() 
    ->columns(
     array(
      'category_name' => new Zend_Db_Expr(
         'some string') 
     ) 
    ); 
+0

如果更新解決了您的問題,請將其作爲答案並接受它。 – OSdave

回答

3

正如我在更新上述,我通過使用解決了這個問題:

$_products->getSelect() 
    ->columns(
     array(
      'category_name' => new Zend_Db_Expr('some string') 
     ) 
    ); 

其實簡單的解決方案!

相關問題