ฉันเขียนโปรแกรมมา 15 ปี 10 ปีด้วย PHP แต่ในโครงการ Drupal แรกของฉัน การใช้ Drupal 9
ฉันกำลังพยายามดึงเอนทิตี (ประเภทเนื้อหาที่กำหนดเอง) ที่มีฟิลด์เอนทิตี (ผู้ใช้) ที่มีหลายค่า 2 ช่อง หากค่าที่ฉันมีอยู่ในช่องหนึ่ง ฉันต้องการรับอีกช่องหนึ่ง ปัญหาคือฉันไม่สามารถหาวิธีขอเอนทิตีเมื่อค่าสเกลาร์ที่ฉันมีอยู่ในรายการ นี่คือสิ่งที่ฉันมี:
กลับ \Drupal::entityQuery('โหนด')
->เงื่อนไข ('ประเภท', 'osj_relationships')
->condition('field_supervised_reps', [$userId], 'IN')
->ดำเนินการ ();
ซึ่งสร้าง SQL นี้:
'เลือก "base_table"."vid" เป็น "vid", "base_table"."nid" เป็น "nid"
จาก
"โหนด" "base_table"
INNER JOIN "node_field_data" "node_field_data" บน "node_field_data"."nid" = "base_table"."nid"
เข้าร่วมภายใน "node__field_supervised_reps" "node__field_supervised_reps" บน "node__field_supervised_reps"."entity_id" = "base_table"."nid"
WHERE ("node_field_data"."type" = 'osj_relationships') และ ("node__field_supervised_reps"."field_supervised_reps_target_id" IN ('2458'))'
ส่วนที่ 2 ของส่วนคำสั่ง WHERE กำลังมองหาค่าฟิลด์ในพารามิเตอร์ของฉัน ฉันต้องการให้ค้นหาพารามิเตอร์ของฉันในฟิลด์ ฉันได้ลอง CONTAINS แล้ว แต่ดูเหมือนว่าจะถือว่าค่าฟิลด์เป็นสตริงแทนที่จะเป็นอาร์เรย์ ถ้าฉันสามารถหมุน WHERE clause รอบ ๆ มันจะสมบูรณ์แบบ เช่น.
(('2458') ใน "node__field_supervised_reps"."field_supervised_reps_target_id")
ฉันคิดว่าฉันสามารถใช้ 'CONTAINS' ได้หากฉันสามารถแทรกรายการฟิลด์ได้ แต่นั่นอาจเสี่ยงต่อการถูกโจมตีที่ผิดพลาด
ข้อเสนอแนะใด ๆ