รหัสกำลังโทร ดำเนินการ ()
บนวัตถุที่ส่งคืนจาก $query->andConditionGroup()
แต่วัตถุนั้นไม่ได้ใช้งานใด ๆ ดำเนินการ ()
กระบวนการ.
วิธีการใช้งานที่ถูกต้อง andConditionGroup()
แสดงอยู่ใน QueryBase::andConditionGroup()
.
$query = \Drupal::entityQuery('รูปวาด');
$group = $query->andConditionGroup()
->เงื่อนไข('ตัวเลขสี', 'สีแดง')
->condition('figures.shape', 'triangle');
$query->condition($group);
$group = $query->andConditionGroup()
->เงื่อนไข('ตัวเลขสี', 'สีน้ำเงิน')
->condition('figures.shape', 'circle');
$query->condition($group);
$entity_ids = $query->execute();
ในกรณีของคุณ ใช้ andConditionGroup()
ไม่จำเป็น เนื่องจากการสืบค้นที่ดำเนินการโดยรหัสนั้นส่งคืนโหนดทั้งหมดที่:
- ประเภทเนื้อหาคือ ระดับ 3
- ชื่อเรื่องคือ
$file_name
- สถานะเป็น 0
ไม่ส่งคืนโหนดทั้งหมดที่มีเงื่อนไขอย่างน้อยหนึ่งข้อที่เป็นจริง คล้ายกับการทำงานของโค้ดต่อไปนี้ ซึ่งจะคืนค่าทั้งหมด หน้าหนังสือ โหนดที่มีค่าของ field_some_field สูงกว่า 14
$query = \Drupal::entityQuery('โหนด')
->เงื่อนไข ('ประเภท', 'หน้า')
->เงื่อนไข ('field_some_field', 14, '>');
$results = $query->execute();
$query->execute()
ส่งคืนอาร์เรย์ของรหัสเอนทิตี ไม่ใช่เอนทิตีหรืออาร์เรย์ของเอนทิตี $nids = $query->execute(); $nids->setPublished(จริง)->บันทึก();
ยังคงผิดเนื่องจากอาร์เรย์ไม่ได้ใช้ setPublished()
กระบวนการ.
กำหนดอาร์เรย์ของโหนด ID $นิดส์
รหัสที่ถูกต้องในการโหลดโหนดคือรหัสต่อไปนี้
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
$โหนด
จะมีอาร์เรย์ของเอนทิตี การเผยแพร่สามารถทำได้โดยใช้รหัสต่อไปนี้
foreach ($ โหนดเป็น $ โหนด) {
$node->setPublished(TRUE)->save();
}
วัตถุที่ส่งคืนจาก \Drupal::entityQuery()
ตรวจสอบว่าผู้ใช้ที่เข้าสู่ระบบในปัจจุบันมีสิทธิ์ดูโหนดที่ส่งคืน ในกรณีส่วนใหญ่ ผู้ใช้ไม่มีสิทธิ์เข้าถึงโหนดที่ไม่ได้เผยแพร่ เพื่อหลีกเลี่ยงไม่ให้เคียวรีแสดงเฉพาะโหนดที่ผู้ใช้ที่ล็อกอินอยู่ในปัจจุบันสามารถดูได้ จำเป็นต้องเรียก $query->accessCheck(เท็จ)
เช่นเดียวกับใน $query = \Drupal::entityQuery('โหนด')->checkAccess(FALSE);
นอกจากนี้ มีอยู่ ('นิด')
การโทรไม่จำเป็น เนื่องจาก ID โหนดจะถูกบันทึกไว้สำหรับโหนดเสมอ
ออกจากลูปบน $i_selected
รหัสที่ฉันจะใช้คือรหัสต่อไปนี้
$query = \Drupal::entityQuery('โหนด')->checkAccess(FALSE);
$nids = $query->condition('ประเภท', 'level3')
->เงื่อนไข('ชื่อ', $file_name)
->เงื่อนไข ('สถานะ', '0')
->ดำเนินการ ();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
foreach ($ โหนดเป็น $ โหนด) {
$node->setPublished(TRUE)->save();
}