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:
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:
"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.
$wrapper->vimn_related_subjects[] = $value;
?Jawaban:
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 "[]":
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:
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:
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:
sumber
$w->field_allowed_regions->set(array(null));
adalah satu-satunya opsi kliring yang berfungsi untuk bidang referensi taksonomi multi-nilai saya.Saya menemukan itu
adalah kegagalan fatal. Tapi
telah diizinkan.
sumber