Magento 1:从集合中的列数据中删除空格
Magento 1 : Removing spaces from column data in collection
我正在获取一个产品集合,我想在自定义属性上使用类似条件,但问题是,在使用类似条件时,我想删除自定义属性值中包含的所有白色 space。
我已经试过了
$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 包含上述任何单词的产品(即 one/two/three/four)
注意:注意到了吗?我的自定义属性中有 space。
您提供的查询执行起来可能很慢,因为它与通配符一起使用。您可以使用 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]
]
);
我有另一个解决方案,直接 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| 创建临时支持 table)。
这将从所选字段中删除您的空白,并用非空白值替换它们(或任何您想用其内爆的值,只需检查内爆功能)。
"test field blanks" => "testfieldsblanks"
对于自定义属性,您可以执行以下操作,因此它将从您的自定义属性值中删除白色 space 并匹配 given/post 数据
$_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]
]
);
我正在获取一个产品集合,我想在自定义属性上使用类似条件,但问题是,在使用类似条件时,我想删除自定义属性值中包含的所有白色 space。
我已经试过了
$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 包含上述任何单词的产品(即 one/two/three/four) 注意:注意到了吗?我的自定义属性中有 space。
您提供的查询执行起来可能很慢,因为它与通配符一起使用。您可以使用 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]
]
);
我有另一个解决方案,直接 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| 创建临时支持 table)。
这将从所选字段中删除您的空白,并用非空白值替换它们(或任何您想用其内爆的值,只需检查内爆功能)。
"test field blanks" => "testfieldsblanks"
对于自定义属性,您可以执行以下操作,因此它将从您的自定义属性值中删除白色 space 并匹配 given/post 数据
$_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]
]
);