Saya belum pernah memiliki kebutuhan untuk melakukan ini sebelum hari ini, tetapi sepertinya Anda tidak dapat membuat ATAU dengan EntityFieldQuery
, karena db_or
digunakan untuk pertanyaan pilihan.
Contoh akan sampai ke semua entitas yang memiliki bidang tanggal di mana nilainya nol atau setelah hari ini.
Apakah saya kehilangan sesuatu atau beberapa trik atau apakah ini tidak didukung?
Jawaban:
Saya telah melihat solusi dari masalah ini . Idenya adalah untuk digunakan
addTag()
dalam kueri dan implementasihook_query_TAG_alter()
, di mana Anda memilikiSelectQuery
objek lama yang baik .sumber
Anda dapat subklas
EntityFieldQuery
dan mengganti beberapa metode.Kondisi yang ditambahkan ke objek kelas
EntityFieldQuery
(misalnya kondisi properti) ditambahkan ke array.Ketika kueri dibuat, array itu kemudian digunakan dalam satu loop yang mirip dengan yang berikut (kode hadir di EntityFieldQuery :: propertyQuery () ):
$select_query
berisi nilai yang dikembalikan dari panggilan kedb_select()
.sumber
Anda tidak dapat saya takut, OR tidak didukung secara alami oleh
EntityFieldQuery
kelas.Salah satu caranya adalah menambahkan tag ke kueri dengan
->addTag()
, lalu menerapkannyahook_query_TAG_alter()
untuk mengubah struktur internal kueri secara manual untuk kueri yang berisi tag itu.Dengan melakukan ini, Anda dapat mengulangi kondisi yang ada dan melakukan perubahan yang diperlukan untuk menambahkan
OR
logika Anda . Ini bukan cara yang cantik untuk melakukannya; Anda dapat menemukan contoh di sini .sumber
Tidak perlu membagi kueri menjadi 2 dan menggabungkan atau semacamnya. Hanya perlu mengubah kueri
Pertimbangkan skenario: Saya memiliki 2 tipe entitas dengan nama mesin: pernyataan tincan, dan tincan_agents
5 bidang referensi entitas pada entitas
4 di antaranya adalah bidang referensi entitas reguler dan bidang ke-5 (tincan_object) adalah bidang referensi multi-entitas, setiap bidang referensi mereferensikan entitas tipe 'Agen'.
Bidang referensi tincan_object dapat merujuk Agen dan Aktivitas (tipe entitas ketiga). Agen memiliki object_type properti, yang bisa berupa Agen atau Grup.
Saya ingin menemukan Pernyataan yang merujuk salah satu dari beberapa Agen yang mungkin ada, di bidang referensi mana pun. Kami membutuhkan operator ATAU antara fieldConditions, tetapi kami juga perlu memeriksa object_type dari bidang referensi jenis multi-entitas, dan pastikan itu salah satu dari dua kemungkinan.
Kode di bawah ini mewakili yang paling sederhana yang mungkin, dalam solusi kami kueri memiliki banyak kondisi, bidang, dll ... sehingga kode yang diperlukan tidak mengandalkan urutan kondisi, atau bahkan jika semua bidang ini sedang ditanyakan.
Solusi: Pemberitahuan di EntityFieldQuery di atas
Ini menandai kueri, memungkinkan penerapan hook_query_TAG_alter ()
sumber
OP ingin menanyakan entitas dengan tanggal null ATAU lebih besar dari x, saya ingin meminta node tanpa bahasa yang ditentukan ATAU bahasa pengguna.
addTag()
adalah solusi terbaik untuk menambahkan pernyataan ATAU aktual, tetapi akan berlebihan dalam kasus saya. ATAU yang sangat sederhana dapat dilakukan dengan mencari properti bahasa dalam array menggunakan:sumber