Saya memiliki objek simpul dengan bidang gambar bernama field_image
. Kapan saya melakukannya
$node
->get('field_image')
->first()
->getValue()
Saya mendapatkan array dengan beberapa properti, bukan objek entitas. Array terlihat seperti ini:
'target_id' => string '8' (length=1)
'alt' => string '' (length=0)
'title' => string '' (length=0)
'width' => string '587' (length=3)
'height' => string '458' (length=3)
'_loaded' => boolean true
'_accessCacheability' =>
object(Drupal\Core\Cache\CacheableMetadata)[1092]
protected 'cacheContexts' =>
array (size=0)
...
protected 'cacheTags' =>
array (size=0)
...
protected 'cacheMaxAge' => int -1
Apakah saya harus manullay memuat entitas file menggunakan target_id
atau ada cara untuk secara otomatis mendapatkan objek entitas yang direferensikan dari Drupal\image\Plugin\Field\FieldType\ImageItem
?
Mengapa entitas yang direferensikan tidak dapat diakses melalui pengambil? Bisa dimuat malas jika tidak segera tersedia.
PHP Fatal error: Call to undefined method Drupal\image\Plugin\Field\FieldType\ImageItem::getTarget()
. Namun$node->get('imagefield')->referencedEntities()
berfungsi berkat fakta$node->get('imagefield')
mengembalikan contohEntityReferenceFieldItemList
yang mengimplementasikanreferencedEntities()
metode. Jadi solusi Anda hanya sebagian - ini berfungsi untuk daftar tetapi tidak untuk bidang tunggal.Jawaban:
Jalur ke entitas yang dirujuk sangat panjang:
Tentu saja kita masih bisa mendapatkannya melalui satu panggilan liner, tapi tetap saja, itu rumit dan saya bertanya-tanya mengapa
EntityReferenceItem
tidak memberikan metode yang akan mengembalikan objek entitas referensi.Perlu juga dicatat bahwa cukup mudah untuk mendapatkan array dari semua entitas yang direferensikan:
Ini berfungsi karena untuk bidang referensi entitas
$node->get($field)
mengembalikan instanceEntityReferenceFieldItemList
yang mengimplementasikanreferencedEntities()
metode.sumber
Anda dapat gunakan:
$node->field_image->entity
jika Anda menginginkan nilai pertama
sumber
$node->get('field_image')->entity
mengembalikanFile
entitas. Namun$node->get('field_image')->getEntity()
mengembalikanNode
entitas induk ! Saya mengerti bahwa metode sihir mungkin dapat digunakan, tetapi mereka adalah PITA dalam proyek yang lebih besar. Mengapa repot-repot menulis antarmuka dan kode oo jika kita didorong untuk menggunakan sihir? Anda menulisnya cukup mudah untuk diingat begitu Anda melakukannya - saya tidak setuju. Setelah Anda mulai melakukan ini, Anda akan mengembangkan kebiasaan yang sangat buruk yang akan membuat kode Anda kurang mudah dibaca dan kurang dapat dipertahankan.Apa yang berhasil untuk saya adalah:
Jawaban lain tidak menghasilkan array bidang entitas yang saya harapkan
sumber
Untuk cara mendapatkan entitas dari bidang yang dirujuk. Saya setuju dengan @SiliconMind tentang referencedEntities itu mengembalikan array objek entitas yang dikunci oleh delta item bidang.
Sederhana saja:
$node->get('field_name')->referencedEntities();
EntityReferenceFieldItemList :: referencedEntities
sumber