作爲解決我的問題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')
)
);
如果更新解決了您的問題,請將其作爲答案並接受它。 – OSdave