Simpan nilai baru dengan entity_metadata_wrapper ke bidang entitas yang merupakan array


9

Saya perlu menyimpan nilai baru ke bidang pada entitas dan saya bertanya-tanya apakah mungkin menggunakan entitas_metadata_wrapper atau apakah hanya mungkin untuk menetapkan nilai yang ada?


beginilah cara saya mengatur nilai $ wrapper-> vimn_related_subjects-> set (array ($ key)); tetapi jika saya ingin menambahkan nilai pada akhir array? Apakah itu mungkin?
Andrew Welch

Sudahkah Anda mencoba $wrapper->vimn_related_subjects[] = $value;?
Clive

Jawaban:


31

Saat berurusan dengan bidang multi-nilai, objek pembungkus metadata entitas terkait adalah turunan dari EntityListWrapper (Ini mungkin ide yang baik untuk menelusuri API untuk melihat metode yang tersedia. Juga perhatikan kelas ini mengimplementasikan antarmuka ArrayAccess )

Jadi cara paling sederhana untuk menambahkan nilai baru ke EntityListWrapper adalah dengan menggunakan operator "[]":

$wrapper->field_example[] = $new_value;

Ini menciptakan entri baru dan memberinya nilainya. Dengan metode ini, delta (offset dalam daftar nilai) dibuat secara otomatis. Anda juga dapat mengatur sendiri offset jika diinginkan. Salah satu dari tiga metode berikut ini setara:

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

Dalam ketiga kasus ini akan menimpa nilai jika delta sudah ada, dan membuat entri baru jika tidak.

Anda juga bisa langsung mengatur array nilai pada bidang itu sendiri. Kedua metode tersebut setara:

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

Namun ini mengharuskan Anda untuk mengetahui struktur internal bidang yang Anda tetapkan karena Anda tidak menggunakan pembungkus metadata bidang tersebut.

Akhirnya Anda bisa mengosongkan bidang multi nilai dengan menyetelnya ke nilai kosong. Ketiga metode ini setara:

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

"EntityMetadataWrapperException: Array properti data tidak dikenal. Di EntityStructureWrapper-> getPropertyInfo ()" Saya mencoba pendekatan kedua Anda, meskipun saya menargetkan bahasa tertentu. yaitu, $ wrapper-> bahasa ($ lang) -> {$ field} -> set ($ new_array);
AlxVallejo

$w->field_allowed_regions->set(array(null));adalah satu-satunya opsi kliring yang berfungsi untuk bidang referensi taksonomi multi-nilai saya.
Luar biasa

3

Saya menemukan itu

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

adalah kegagalan fatal. Tapi

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

telah diizinkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.