Nowadays I’m facing interesting programming challenges. The last one was the changing of street line count of a customer address. As you may know, Magento doesn’t have a good documentation for similar situations. So here it is how I did it.
Create an upgrade script in your module. Inside you should have something like:
$installer = $this;
$installer->startSetup();
$db = $this->getConnection();
$path = "customer/address/street_lines";
$value = 3; // change this with your new street line value
// here you will read the config id of the street line
// if exists update it, else insert it, naturally you could have used a replace into syntax also
// this is just for simplicity. Be careful, this solution does not treat cases when
// you are using multiple stores with different settings
$sql = $db->prepare("
SELECT config_id
FROM core_config_data
WHERE
path = :path
");
$sql->execute(array(
":path" => $path
));
$result = $sql->fetch();
if (!empty($result))
{
$sql = $db->prepare("
UPDATE core_config_data
SET
value = :value
WHERE
config_id = :config_id
");
$sql->execute(array(
":config_id" => $result['config_id'],
":value" => $value
));
}
else
{
$sql = $db->prepare("
INSERT INTO core_config_data (path, value)
VALUES(:path, :value)
");
$sql->execute(array(
":path" => $path,
":value" => $value
));
}
// next step is to read the attribute id of "street" from the eav_attribute table
$sql = $db->prepare("
SELECT attribute_id
FROM eav_attribute
WHERE
entity_type_id = 2 AND
attribute_code = 'street'
");
$sql->execute();
$result = $sql->fetch();
$streetAttributeId = $result['attribute_id'];
// update "multiline_count" column in "customer_eav_attribute" table
$sql = $db->prepare("
UPDATE customer_eav_attribute
SET multiline_count = :value
WHERE
attribute_id = :street_attribute_id
");
$sql->execute(array(
":value" => $value,
":street_attribute_id" => $streetAttributeId
));
$installer->endSetup();
Briefly: you have to save in core_config_data and also in customer_eav_attribute table your new street line value.