Magento产品标题char_length限制

时间:2014-11-10 18:54:40

标签: mysql magento collections zend-db

我正在尝试检索产品的集合,其中产品的标题(名称)超过N个字符。 到目前为止,我正在尝试这样做:

 $collection = Mage::getModel('catalog/product')
    ->getCollection()
    ->addAttributeToSelect('name');

 $collection->getSelect()->where("CHAR_LENGTH(`e.name`) > 70");

它将输出的查询是:

SELECT `e`.* FROM `catalog_product_entity` AS `e` WHERE (CHAR_LENGTH(`e.name`) > 70)

它当前抛出一个错误,因为它不明白名称列实际是什么

Column not found: 1054 Unknown column 'e.name' in 'where clause'

我可以遍历检查char长度的所有产品,但效率不高。我试图找到一个纯粹的MySQL解决方案,而不写出 - >查询(...)。

1 个答案:

答案 0 :(得分:0)

基于我自己必须加入的连接,结果有点棘手。我知道我必须运行的SQL,它看起来像这样:

SELECT value, CHAR_LENGTH( value ) AS 'length'
FROM catalog_product_entity_varchar
WHERE entity_type_id = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code =    'catalog_product')
AND attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'name' AND     entity_type_id = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product'))
AND CHAR_LENGTH(value) > 70;

magento方式:

    //calculate attribute id of title
    $attr = Mage::getSingleton("eav/config")->getAttribute('catalog_product', 'entity_type_id')->getEntityTypeId();
    $col = Mage::getModel('eav/entity_attribute')
               ->getCollection()
               ->addFieldToFilter('attribute_code', 'name')
               ->addFieldToFilter('entity_type_id', $attr);
    $attr_id = $col->getFirstItem()->getAttributeId();

    //get products
    $collection = Mage::getModel('catalog/product')->getCollection();
    $collection->getSelect()
               ->join( array('cat_varchar'=> 'catalog_product_entity_varchar'), 'cat_varchar.entity_id = e.entity_id', array('cat_varchar.value'))
               ->where("`cat_varchar`.`attribute_id` = {$attr_id}")
               ->where("CHAR_LENGTH(`cat_varchar`.`value`) > 70");