作为解决我的问题sorting collections by subcategory, an attribute and by productname中解释的“按子类别排序产品集合”问题的后续想法,我有一个想法是在集合的选定字段中添加AS
表达式
我想要实现的目标(SQL-wise)是这样的:
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 :(得分:3)
如上所述,我在更新中使用以下方法解决了问题:
$_products->getSelect()
->columns(
array(
'category_name' => new Zend_Db_Expr('some string')
)
);
实际上,简单的解决方案!