Сохраните новое значение с entity_metadata_wrapper в поле объекта, которое является массивом
9
Мне нужно сохранить новое значение в поле объекта, и мне было интересно, можно ли использовать entity_metadata_wrapper или можно только установить существующее значение?
вот как мне было установлено значение $ wrapper-> vimn_related_subjects-> set (array ($ key)); но если бы я хотел добавить значение в конец массива? это возможно?
Эндрю Уэлч
Ты пробовал $wrapper->vimn_related_subjects[] = $value;?
Клайв
Ответы:
31
При работе с полями с несколькими значениями связанный объект-оболочка метаданных сущности является экземпляром EntityListWrapper (может быть хорошей идеей просмотреть API, чтобы посмотреть доступные методы. Также обратите внимание, что этот класс реализует интерфейс ArrayAccess )
Поэтому самый простой способ добавить новые значения в EntityListWrapper - использовать оператор «[]»:
$wrapper->field_example[]= $new_value;
Это создает новую запись и присваивает ей значение. С помощью этих методов дельта (смещение в списке значений) создается автоматически. Вы также можете установить смещение самостоятельно, если хотите. Любой из трех следующих методов эквивалентен:
"EntityMetadataWrapperException: Неизвестное свойство данных Массив. В EntityStructureWrapper-> getPropertyInfo ()" Я пробую ваш второй подход, хотя я нацеливаюсь на конкретный язык. т. е. $ wrapper-> language ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo
$w->field_allowed_regions->set(array(null));является единственным вариантом очистки, который работал для моего справочного поля многозначной таксономии.
$wrapper->vimn_related_subjects[] = $value;
?Ответы:
При работе с полями с несколькими значениями связанный объект-оболочка метаданных сущности является экземпляром EntityListWrapper (может быть хорошей идеей просмотреть API, чтобы посмотреть доступные методы. Также обратите внимание, что этот класс реализует интерфейс ArrayAccess )
Поэтому самый простой способ добавить новые значения в EntityListWrapper - использовать оператор «[]»:
Это создает новую запись и присваивает ей значение. С помощью этих методов дельта (смещение в списке значений) создается автоматически. Вы также можете установить смещение самостоятельно, если хотите. Любой из трех следующих методов эквивалентен:
Во всех трех случаях это перезапишет значения, если дельта уже существует, и создаст новую запись, если нет.
Вы также можете напрямую установить массив значений на само поле. Оба метода эквивалентны:
Однако для этого необходимо знать внутреннюю структуру поля, которое вы назначаете, поскольку вы не используете оболочку метаданных поля.
Наконец, вы можете очистить поле с несколькими значениями, установив его в пустое значение. Все три метода эквивалентны:
источник
$w->field_allowed_regions->set(array(null));
является единственным вариантом очистки, который работал для моего справочного поля многозначной таксономии.я нашел это
был фатальный провал. Но
был разрешен.
источник