Мне нужно сохранить новое значение в поле объекта, и мне было интересно, можно ли использовать entity_metadata_wrapper или можно только установить существующее значение?
$wrapper->vimn_related_subjects[] = $value;
?
Мне нужно сохранить новое значение в поле объекта, и мне было интересно, можно ли использовать entity_metadata_wrapper или можно только установить существующее значение?
$wrapper->vimn_related_subjects[] = $value;
?
Ответы:
При работе с полями с несколькими значениями связанный объект-оболочка метаданных сущности является экземпляром EntityListWrapper (может быть хорошей идеей просмотреть API, чтобы посмотреть доступные методы. Также обратите внимание, что этот класс реализует интерфейс ArrayAccess )
Поэтому самый простой способ добавить новые значения в EntityListWrapper - использовать оператор «[]»:
$wrapper->field_example[] = $new_value;
Это создает новую запись и присваивает ей значение. С помощью этих методов дельта (смещение в списке значений) создается автоматически. Вы также можете установить смещение самостоятельно, если хотите. Любой из трех следующих методов эквивалентен:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
Во всех трех случаях это перезапишет значения, если дельта уже существует, и создаст новую запись, если нет.
Вы также можете напрямую установить массив значений на само поле. Оба метода эквивалентны:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
Однако для этого необходимо знать внутреннюю структуру поля, которое вы назначаете, поскольку вы не используете оболочку метаданных поля.
Наконец, вы можете очистить поле с несколькими значениями, установив его в пустое значение. Все три метода эквивалентны:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
является единственным вариантом очистки, который работал для моего справочного поля многозначной таксономии.