Dalam kasus penggunaan saya, saya memiliki entitas yang memiliki dua bidang yang merujuk ke kosakata unik.
Berita: - tag (referensi entitas) - kategori (referensi entitas)
Jika saya meminta salah satu dari referensi tersebut, saya mendapatkan hasil namun ketika saya meminta keduanya (sebuah filter DAN) saya tidak mendapatkan hasil. Saya sudah memeriksanya tiga kali lipat sekarang dan ada entitas yang berisi tag dan kategori yang saya tanyakan.
Apakah ini kesalahan pengguna atau bug Drupal?
$query = \Drupal::entityQuery('node')
->condition('status', 1)
->condition('type', 'news')
;
$group = $query->andConditionGroup()
->condition('field_tag.entity.name', ['cars'], 'IN')
->condition('field_category.entity.name', ['sport'], 'IN')
;
$query->condition($group);
$nids = $query->execute();
EDIT: Saya telah menemukan solusi dengan menanyakan nilai mentah alih-alih entity.value. Ini adalah situasi yang tidak diinginkan
$query = \Drupal::entityQuery('node')
->condition('status', 1)
->condition('type', 'news')
;
$group = $query->andConditionGroup()
->condition('field_tag.entity.name', ['cars'], 'IN')
->condition('field_category', [1], 'IN')
;
$query->condition($group);
$nids = $query->execute();
Jawaban:
Alasan Anda tidak bisa melakukan itu adalah bahwa kedua bidang ini adalah referensi entitas ke entitas yang sama. Itu berarti bahwa tabel dasar adalah tabel dasar yang sama.
Anda meminta Drupal untuk Bergabung dengan tabel taxonomy_data ke tabel node dan kemudian membuat kondisi AND mustahil di atasnya.
PS
Anda bisa menggunakan
condition('field_tags', 1);
bukancondition('field_tags', [1], 'IN');
Dan seperti yang disebutkan dalam komentar, grup kondisi AND adalah default, jadi Anda tidak perlu menentukannya.
PPS
Anda harus kedua kondisi menggunakan id yang dirujuk agar konsisten.
sumber
Tebakan liar yang belum diuji:
Jika ini tidak berhasil, temukan saya di IRC # drupal-berkontribusi minggu depan dan kami akan menyelesaikannya.
sumber
Sebenarnya saya menemukan retasan untuk ini. inilah penjelasan saya tentang apa yang saya temukan:
Saya memiliki 3 bidang dalam tipe konten saya masing-masing memegang referensi ke istilah taksonomi dari berbagai kosa kata. Dan saya ingin menanyakan entitas yang memiliki istilah taksonomi tertentu di masing-masing 3 bidang (an dan kondisi).
memeriksa query SQL internal yang dihasilkan setelah beberapa upaya dengan berbagai kombinasi kondisi saya menemukan itu
pada dasarnya seperti yang Anda lihat, tidak ada referensi ke bidang individu yang sebenarnya menggunakan kosakata tertentu, jadi peretasan saya adalah melakukan sesuatu seperti ini:
lagi ini berfungsi, saya sudah mengujinya dan berfungsi sebagai kondisi DAN hanya mengembalikan tipe konten dengan 3 istilah taksonomi bahkan jika referensi ke istilah taksonomi tersebut disimpan di bidang yang berbeda dalam tipe konten.
Saya tidak bangga dengan peretasan tetapi berhasil, jadi jika ini dapat membantu seseorang menghemat waktu, lakukan saja.
sumber