Saya ingin menjalankan kueri menggunakan objek EntityFieldQuery. Saya butuh nilai dari tabel node dan node_access karena itu saya harus menggunakan INNER JOIN. Dari dokumentasi do, saya tidak tahu bagaimana ini mungkin.
Inilah yang saya miliki -
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'node_access')
->propertyCondition('type', 'external_link')
->propertyCondition('status', 1)
->fieldCondition('gid', '3', '=')
->fieldCondition('realm', 'domain_id', '=')
->fieldCondition('grant_view', '1', '>=')
->range(0,1)
->execute();
->fieldCondition('field_name', 'target_id', $entities_a, 'IN');
Jawaban:
Anda tidak dapat menambahkan gabungan tambahan
EntityFieldQuery
secara langsung (tidak didukung), tetapi Anda dapat menambahkan tag ke kueri, menerapkanhook_query_TAG_alter()
, dan menambahkan gabungan secara manual saat kueri dikonversi ke kueri db standar.Ini tidak diuji tetapi mungkin akan membawa Anda ke sana:
Dan kemudian query mengubah fungsi:
Cara lain untuk melakukannya adalah dengan subklas
EntityFieldQuery
itu sendiri dan menambahkan bergabung, tapi saya pikir metode di atas lebih sederhana dalam hal ini.sumber
EntityFieldQuery
db_select
, maka Anda dapat memiliki kontrol sebanyak yang Anda inginkanEntityFieldQuery
tidak melakukan caching apa pun, ia hanya membungkusSelectQuery
dan menambahkan beberapa metode untuk entitas. Metode-metode tambahan tersebut menjelaskan sedikit (sangat sedikit) penurunan kinerja yang Anda alami menggunakannya sebagai lawan dari yang biasaSelectQuery
Jika Anda menggunakan properti khusus dengan tabel Anda sendiri, metode tag tidak akan berfungsi. Anda harus menggunakan subquery sebagai gantinya:
Lihat Butuh gabung di EntityFieldQuery, bagaimana dengan subquery? untuk detail.
sumber