Zapisz nową wartość z entity_metadata_wrapper w polu encji, która jest tablicą


9

Muszę zapisać nową wartość w polu na encji i zastanawiałem się, czy można użyć encji_zadania_metadanych_instancji, czy też można ustawić tylko istniejącą wartość?


oto jak ustawiłem wartość $ wrapper-> vimn_related_subjects-> set (array ($ key)); ale jeśli chciałbym dodać wartość na końcu tablicy? czy to jest możliwe?
Andrew Welch

Próbowałeś $wrapper->vimn_related_subjects[] = $value;?
Clive

Odpowiedzi:


31

W przypadku pól o wielu wartościach powiązany obiekt opakowania metadanych encji jest instancją EntityListWrapper (dobrym pomysłem może być przejrzenie interfejsu API w celu sprawdzenia dostępnych metod. Należy również pamiętać, że ta klasa implementuje interfejs ArrayAccess )

Tak więc najprostszym sposobem dodania nowych wartości do EntityListWrapper jest użycie operatora „[]”:

$wrapper->field_example[] = $new_value;

Spowoduje to utworzenie nowego wpisu i przypisanie mu wartości. Dzięki tym metodom delta (przesunięcie na liście wartości) jest tworzona automatycznie. Możesz także ustawić przesunięcie, jeśli chcesz. Każda z trzech poniższych metod jest równoważna:

$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);

We wszystkich trzech przypadkach spowoduje to zastąpienie wartości, jeśli delta już istnieje, i utworzy nowy wpis, jeśli nie.

Możesz także bezpośrednio ustawić tablicę wartości na samym polu. Obie metody są równoważne:

$value = array
  0 => array('property_example' => 'hello'),
  1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);

Wymaga to jednak znajomości wewnętrznej struktury pola, do którego przypisujesz, ponieważ nie używasz opakowania metadanych pola.

Na koniec możesz opróżnić pole wielu wartości, ustawiając je na pustą wartość. Wszystkie trzy metody są równoważne:

$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;

„EntityMetadataWrapperException: Nieznana właściwość danych Array. In EntityStructureWrapper-> getPropertyInfo ()” Próbuję drugiego podejścia, chociaż celuję w konkretny język. tj. $ wrapper-> language ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo

$w->field_allowed_regions->set(array(null));jest jedyną opcją rozliczeniową, która działała w moim polu referencyjnym systematyki wielu wartości.
Incredible

3

znalazłem to

$wrapper->field_example[]->set($new_value);

była śmiertelna porażka. Ale

$wrapper->field_example[NULL]->set($new_value);

było dozwolone.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.