entity_metadata_wrapperで新しい値を配列であるエンティティフィールドに保存します


9

エンティティのフィールドに新しい値を保存する必要がありますが、entity_metadata_wrapperを使用できるのか、それとも既存の値を設定することしかできないのでしょうか。


これは$ wrapper-> vimn_related_subjects-> set(array($ key));の値を設定する方法です。しかし、配列の最後に値を追加したい場合はどうなりますか?それは可能ですか?
Andrew Welch、

試しました$wrapper->vimn_related_subjects[] = $value;か?
クライヴ

回答:


31

複数値フィールドを処理する場合、関連付けられているエンティティメタデータラッパーオブジェクトはEntityListWrapperのインスタンスです(APIを参照して使用可能なメソッドを確認することをお勧めします。このクラスはArrayAccessインターフェイスを実装していることにも注意してください)

したがって、EntityListWrapperに新しい値を追加する最も簡単な方法は、 "[]"演算子を使用することです。

$wrapper->field_example[] = $new_value;

これにより、新しいエントリが作成され、値が割り当てられます。このメソッドでは、デルタ(値のリスト内のオフセット)が自動的に作成されます。必要に応じて、オフセットを自分で設定することもできます。次の3つの方法はどれも同じです。

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

3つすべてのケースで、デルタがすでに存在する場合は値が上書きされ、存在しない場合は新しいエントリが作成されます。

フィールド自体に値の配列を直接設定することもできます。どちらの方法も同等です。

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

ただし、フィールドのメタデータラッパーを使用していないため、割り当てるフィールドの内部構造を知る必要があります。

最後に、複数値フィールドを空の値に設定することで空にすることができます。3つの方法はすべて同等です。

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

"EntityMetadataWrapperException:Unknown data property Array。in EntityStructureWrapper-> getPropertyInfo()"特定の言語をターゲットにしていますが、2番目のアプローチを試みています。つまり、$ wrapper-> language($ lang)-> {$ field}-> set($ new_array);
AlxVallejo 2015年

$w->field_allowed_regions->set(array(null));多値分類法参照フィールドで機能した唯一の決済オプションです。
2016年

3

見つけた

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

致命的な失敗でした。だが

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

許可されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.