【问题标题】:Magento 1 : Removing spaces from column data in collectionMagento 1:从集合中的列数据中删除空格
【发布时间】:2019-08-14 09:01:25
【问题描述】:

我正在获取产品集合,我想在自定义属性上使用类似条件,但问题是在使用类似条件时,我想删除自定义属性值中包含的所有空白。

我已经试过了

    $psku = 'some_sku';
    $_product = Mage::getModel('catalog/product')->getCollection();
    $_product->addFieldToFilter(str_replace(' ', '', 'simple_skus_map'), 
    array(array('like' => '%,'.$psku.',%'),
    array('like' => '%,'.$psku),
    array('like' => $psku.',%'),
    array('like' => $psku)
   ));

// simple_skus_map :(我的自定义属性具有像一、二、三、四这样的数据)。我希望以下代码应该获取 simple_skus_map 包含上述任何单词的所有产品(即一/二/三/四) 注意:注意到了吗?我的自定义属性中有空格。

【问题讨论】:

    标签: php mysql magento magento-1.9


    【解决方案1】:

    您提供的查询可能执行缓慢,因为它与通配符一起使用。您可以使用find_in_set 功能。

    幸运的是,magento 也支持这一点:

    $_product = Mage::getModel('catalog/product')->getCollection();
    
    // Trim spaces, 'save to column' trimmed_simple_skus_map
    $_product->addExpressionAttributeToSelect('trimmed_simple_skus_map', 'REPLACE(sku,\' \',\' \')', 'simple_skus_map');
    
    // Find in trimmed set
    $_product->addFieldToFilter('trimmed_simple_skus_map', [
            'finset' => [$psku]
        ]
    );
    

    【讨论】:

    • 你好 Paul,谢谢你的帮助,我想过滤我的自定义属性,所以我只是修改了你的代码并根据需要得到了结果。这是我的代码: $_product = Mage::getModel('catalog/product')->getCollection(); $_product->addExpressionAttributeToSelect('trimmed_simple_skus_map', 'REPLACE({{simple_skus_map}},\'\',\'\')','simple_skus_map'); $_product->addFieldToFilter('trimmed_simple_skus_map', [ 'finset' => [$psku]] );
    【解决方案2】:

    我有另一个解决方案,使用直接 SQL 查询。 这是php代码:

    $resource = Mage::getSingleton('core/resource');
        $readConnection = $resource->getConnection('core_read');
        $writeConnection = $resource->getConnection('core_write');
    
        $q_find_blank = "SELECT *FIELD_NAME* FROM simple_skus_map WHERE *FIELD_NAME* LIKE '% %';  ";
        $results = $readConnection->fetchAll($q_find_blank); //get all field with a blank space
    
        foreach ($results as $result){ //set all the fields in array and removes the blanks
            $result = explode(' ',$result);
            $no_blanks_fields[] = implode("",$result);
        }
    
        echo print_r($no_blanks_fields);
    
        foreach ($no_blanks_fields as $no_blanks_field){ //replace them in the database field
            echo $no_blanks_field . "<br>";
            $q_update = "UPDATE simple_skus_map set *FIELD_NAME* = ".$no_blanks_field." WHERE *condition referencing the right field to his value*";
            $writeConnection->query($q_update);
        }
    

    这很简单,性能不是很高,但很有效。 请记住,当您写入数据时,请确保在正确的字段中设置正确的值(您可以使用 |field|id| 创建一个临时支持表)。

    这将从所选字段中删除您的空白,并将它们替换为非空白值(或任何您想要内爆的值,只需检查内爆函数)。

    "测试字段空白" => "testfieldsblanks"

    【讨论】:

      【解决方案3】:

      对于自定义属性,您可以执行以下操作,因此它将从您的自定义属性值中删除空格并匹配给定/发布数据

          $_product = Mage::getModel('catalog/product')->getCollection();
          $_product->addExpressionAttributeToSelect('trimmed_simple_skus_map', 
          'REPLACE({{simple_skus_map}},\' \',\'\')','simple_skus_map');
          $_product->addFieldToFilter('trimmed_simple_skus_map', [
          'finset' => [$psku]
              ]
          );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多