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.
$wrapper->vimn_related_subjects[] = $value;
?
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.
$wrapper->vimn_related_subjects[] = $value;
?
Antworten:
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 die ArrayAccess-Schnittstelle implementiert. )
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;
$w->field_allowed_regions->set(array(null));
ist die einzige Clearing-Option, die für mein mehrwertiges Taxonomie-Referenzfeld funktioniert hat.