I need to update the allowed values option on an list_integer field. For reasons at the moment, I can't just update and export the configuration and import it on production until we implement config_ignore. I also do not want to edit several block types to update a few field(s) coming up across several environments - so if I can script it and save time that is what I want to do.
In an update hook, I am trying this:
/**
* Update the result options for the Result Count field.
*/
function mymodule_update_8001(&$sandbox) {
$allowed_values = [];
for ($x = 1; $x < 16; $x++) {
$allowed_values[$x] = (string) $x;
}
$allowed_values[50] = '50';
$allowed_values[75] = '75';
$allowed_values[100] = '100';
$old_config = FieldStorageConfig::load('block_content.field_result_count');
$new_config = $old_config->createDuplicate();
$new_config->original = $new_config;
$new_config->enforceIsNew(FALSE);
$new_config
->setSetting('allowed_values', $allowed_values)
->save();
}
It appeared to add the new values to the field, but the terminal spit this out when running the database update:
> [warning] assert(): Cannot load the "field_storage_config" entity with NULL ID. failed EntityStorageBase.php:249
> [warning] array_flip(): Can only flip STRING and INTEGER values! EntityStorageBase.php:266
Is this the proper way to update an existing field?