Preciso salvar um novo valor em um campo em uma entidade e queria saber se era possível usar entity_metadata_wrapper ou é possível apenas definir um valor existente?
$wrapper->vimn_related_subjects[] = $value;
?
Preciso salvar um novo valor em um campo em uma entidade e queria saber se era possível usar entity_metadata_wrapper ou é possível apenas definir um valor existente?
$wrapper->vimn_related_subjects[] = $value;
?
Respostas:
Ao lidar com campos com vários valores, o objeto de wrapper de metadados da entidade associado é uma instância de EntityListWrapper (pode ser uma boa ideia procurar na API para examinar os métodos disponíveis. Observe também que essa classe implementa a interface ArrayAccess )
Portanto, a maneira mais simples de adicionar novos valores a um EntityListWrapper é usando o operador "[]":
$wrapper->field_example[] = $new_value;
Isso cria uma nova entrada e atribui o valor a ela. Com esses métodos, o delta (o deslocamento na lista de valores) é criado automaticamente. Você também pode definir o deslocamento, se desejar. Qualquer um dos três métodos a seguir é equivalente:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
Nos três casos, isso substituirá os valores se o delta já existir e criará uma nova entrada, se não existir.
Você também pode definir diretamente uma matriz de valor no próprio campo. Ambos os métodos são equivalentes:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
No entanto, isso exige que você conheça a estrutura interna do campo ao qual está atribuindo, pois não está usando o wrapper de metadados do campo.
Finalmente, você pode esvaziar um campo com vários valores configurando-o para um valor vazio. Todos os três métodos são equivalentes:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
é a única opção de compensação que funcionou no meu campo de referência de taxonomia com vários valores.