Salve um novo valor com entity_metadata_wrapper em um campo de entidade que é uma matriz
9
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?
foi assim que fui definido o valor $ wrapper-> vimn_related_subjects-> set (array ($ key)); mas se eu quisesse adicionar um valor ao final da matriz? isso é possível?
Andrew Welch
Você já tentou $wrapper->vimn_related_subjects[] = $value;?
Clive
Respostas:
31
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:
"EntityMetadataWrapperException: propriedade de dados desconhecidos Array. In EntityStructureWrapper-> getPropertyInfo ()" Estou tentando sua segunda abordagem, embora esteja direcionando um idioma específico. ou seja, $ wrapper-> idioma ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo 27/01
$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.
$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 "[]":
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:
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:
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:
fonte
$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.eu achei aquilo
foi um fracasso fatal. Mas
foi permitido.
fonte