Score:0

EntityQuery ไม่รวมโหนดที่ไม่ได้อยู่ในฟิลด์อ้างอิงเอนทิตีที่มีหลายค่า

ธง cn

Drupal v. 9.3.8 เมื่อเร็ว ๆ นี้ฉันใช้คำสั่ง entityQuery และสำหรับการค้นหาที่ง่ายกว่านั้น ฉันไม่มีปัญหา ตอนนี้ฉันต้องกรอง รวมทั้งสำหรับตัวดำเนินการ '=' และ 'IN' รวมถึงโหนดด้วย ซึ่งฟิลด์ที่มีหลายค่าไม่มีค่า ââหรือที่ไม่มีค่าที่แน่นอน การอ่านเอกสารฉันใช้ตัวดำเนินการ 'ไม่เข้า' แต่ได้ผลลัพธ์ที่ไม่ดี ตัวอย่าง แบบสอบถามควรส่งคืนโหนดที่ไม่มีค่า 161 และ 163 ให้ฉัน นี่คือข้อความค้นหาที่ฉันทำให้ง่ายขึ้นเพื่อลองใช้โอเปอเรเตอร์ 'NOT IN'

$nids = \Drupal::entityTypeManager()->getStorage('โหนด')->getQuery()
->condition('type' , 'gestione' )
->ไม่มีอยู่ ('field_attivita')
->เงื่อนไข ( 'field_attivita', ['161', '163'], 'ไม่อยู่ใน' )
->ดำเนินการ ();

ฉันยังลองกับตัวดำเนินการ '<>' แต่ไม่มีอะไรให้ทำ

ในบรรดาบทความและคำถามต่างๆ ฉันได้อ่านโพสต์ที่ใกล้เคียงกับคำขอของฉันด้วย วิธีใช้entityQueryเพื่อเลือกว่าฟิลด์entityReferenceหลายค่าไม่มีรหัสหรือไม่ แต่ฉันไม่เข้าใจว่าทำไมมันไม่ทำงาน

leymannx avatar
ne flag
นี้ไม่ได้มีอยู่คืออะไร? .target_id เหมือนกับที่แสดงในคำตอบที่เชื่อมโยงคืออะไร
sonfd avatar
in flag
ฉันไม่แน่ใจ แต่ฉันไม่คิดว่าคุณสามารถทำได้ในแบบสอบถามเดียว ฉันคิดว่าคุณอาจต้อง 1. สืบค้นทั้งหมด 2. สืบค้นรายการที่มีรหัสที่คุณไม่ต้องการ แล้วลบรหัสออกจากแบบสอบถาม 2 ออกจากชุดผลลัพธ์ของแบบสอบถาม 1 ซึ่ง btw คือสิ่งที่โดยพื้นฐานแล้ว คำตอบที่เชื่อมโยงกำลังพูด
sonfd avatar
in flag
ฉันคิดว่าปัญหาที่นี่คือวิธีจัดเก็บค่าอ้างอิงเอนทิตี - แต่ละค่าในฟิลด์ที่มีหลายค่าจะได้รับแถวของตัวเองในตาราง db หากฟิลด์ของคุณมีจำนวนสมาชิก = 1 คุณสามารถใช้ค่าไม่เท่ากันสำหรับแต่ละค่าที่คุณต้องการยกเว้น
cn flag
sonfd ขอบคุณสำหรับการตอบกลับและคำอธิบายดังที่ได้กล่าวไปแล้ว เมื่อเร็ว ๆ นี้ฉันได้รับคำถาม (ขออภัยด้วยภาษาอังกฤษระดับประถมศึกษาของฉันด้วย ด้วยเหตุนี้ฉันจึงไม่ชัดเจน) ฉันทำการทดสอบตามคำแนะนำของคุณ และบางทีฉันอาจเข้าใจสิ่งที่คุณพูดกับฉัน แต่มีสิ่งหนึ่งที่ฉันไม่เข้าใจ ฉันได้เขียนข้อมูลบางอย่างสำหรับตัวอย่าง อันดับ Field_activity | $ วาร์ 1 300 | 161 2 161 | 163 3 400 | 4 163 | 5 ว่าง | 6 200 | 7 163 | 8 ว่าง | ...
cn flag
ถ้าฉันใช้เงื่อนไข -> เงื่อนไข ('conflict_activity_field', [161, 163], 'IN') มันนำโหนดกลับมาในตำแหน่ง 2 - 4 และ 7 ของตัวอย่าง -> เงื่อนไข ('conflict_activity_field', [161, 163], 'ไม่อยู่ใน') ควรทำลายโหนดที่ไม่มี 161 และ 163 เท่านั้น มิฉะนั้นฉันไม่เข้าใจว่าตัวดำเนินการ 'ไม่เข้า' ทำอะไรในคู่มือ SQL ที่ยืนยัน ผมงุนงงทำ 2 แบบสอบถามแล้วความแตกต่างระหว่างอาร์เรย์ แบบสอบถามมีความซับซ้อนและข้อมูลจำนวนมากอาจทำให้การประมวลผลช้าลง
cn flag
leymannx ขอบคุณสำหรับการตอบกลับ แต่ฉันไม่เข้าใจ notExist ระบุว่าฟิลด์ที่มีหลายค่าไม่มีข้อมูลหรือไม่ target_id เป็นรหัสของโหนด

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา