ฉันต้องซ้อน "where Groups" บางส่วนใน QueryPluginBase แต่ฉันสามารถซ้อนกลุ่มเชิงลึกกลุ่มแรกกับ "where" หลักโดยใช้ setWhereGroup. ฉันต้องการเพิ่มกลุ่มในกลุ่มอื่น แต่ไม่มีฟังก์ชันที่จะทำได้เนื่องจาก setWhereGroup ให้คุณเพิ่มกลุ่ม OR/AND ใหม่ แต่ฉันไม่สามารถตั้งค่า ID กลุ่มหลักที่ฉันต้องการซ้อนได้ ตัวอย่างเช่น ฉันต้องการ:
((เงื่อนไขที่ 1 หรือเงื่อนไขที่ 2) และ ( (เงื่อนไขที่ 3 หรือเงื่อนไขที่ 4) และ (เงื่อนไขที่ 5 หรือเงื่อนไขที่ 6) )) หรือ (เงื่อนไขที่ 7)
นี่คือปลั๊กอินตัวกรองมุมมองที่กำหนดเองของฉัน:
เนมสเปซ Drupal\my_module\Plugin\views\filter;
ใช้ Drupal\views\Plugin\views\filter\FilterPluginBase;
ใช้ Drupal\views\Plugin\views\display\DisplayPluginBase;
ใช้ Drupal\views\ViewExecutable;
/**
* ตัวกรองที่กำหนดเองของฉัน
*
* @ingroup views_filter_handlers
*
* @ViewsFilter("my_custom_filter")
*/
คลาส MyCustomFilter ขยาย FilterPluginBase {
/**
* {@inheritdoc}
*/
init ฟังก์ชันสาธารณะ (ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
parent::init($view,$display,$options);
$this->valueTitle = t('กรองวาระ usuario');
}
แบบสอบถามฟังก์ชันสาธารณะ () {
$this->query->setWhereGroup('หรือ', '90');
$user_org = $user->field_usr_org;
foreach ($user_org เป็น $org) {
$this->query->addWhere('90', 'mytable.myfieldid', $org->target_id, '=');
}
$this->query->setWhereGroup('หรือ', '91');
....
}
}