it-swarm.com.de

Speichern Sie einen neuen Wert mit entity_metadata_wrapper in einem Entitätsfeld, das ein Array ist

Ich muss einen neuen Wert in einem Feld einer Entität speichern und habe mich gefragt, ob es möglich ist, entity_metadata_wrapper zu verwenden, oder ob nur ein vorhandener Wert festgelegt werden kann.

9
Andrew Welch

Beim Umgang mit mehrwertigen Feldern ist das zugeordnete Entity-Metadaten-Wrapper-Objekt eine Instanz von EntityListWrapper (Es kann sinnvoll sein, die API zu durchsuchen, um die verfügbaren Methoden anzuzeigen. Beachten Sie auch, dass diese Klasse das implementiert ArrayAccess-Schnittstelle )

Der einfachste Weg, einem EntityListWrapper neue Werte hinzuzufügen, ist die Verwendung des Operators "[]":

$wrapper->field_example[] = $new_value;

Dadurch wird ein neuer Eintrag erstellt und ihm der Wert zugewiesen. Bei diesen Methoden wird das Delta (der Versatz innerhalb der Werteliste) automatisch erstellt. Sie können den Offset auch selbst einstellen, wenn Sie dies wünschen. Jede der drei folgenden Methoden ist äquivalent:

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

In allen drei Fällen werden dadurch Werte überschrieben, wenn das Delta bereits vorhanden ist, und wenn nicht, wird ein neuer Eintrag erstellt.

Sie können auch direkt ein Wertearray für das Feld selbst festlegen. Beide Methoden sind gleichwertig:

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

Dies setzt jedoch voraus, dass Sie die interne Struktur des Felds kennen, dem Sie zuweisen, da Sie den Metadaten-Wrapper des Felds nicht verwenden.

Schließlich können Sie ein Feld mit mehreren Werten leeren, indem Sie es auf einen leeren Wert setzen. Alle drei Methoden sind gleichwertig:

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

Ich habe das gefunden

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

war ein fataler Misserfolg. Aber

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

war erlaubt.

3
dman