Încerc să construiesc un filtru de vizualizare personalizat și în metoda de interogare trebuie să creez această îmbinare.
LEFT JOIN lista node__field_list ON node_field_data.nid = list.entity_id
ȘI listă.ștersă = 0
AND (list.langcode = node_field_data.langcode SAU list.bundle IN ('option_1','option_2'))
Folosind documentația pentru ViewsJoinHandler
, am putut crea unirea, dar nu am putut recrea condiționalele din proprietatea „extra”, așa cum sugera documentația.
$table = 'node_field_data';
$related_content = ['option_1','option_2'];
$extra = "cc.deleted = 0 AND (cc.langcode = node_field_data.langcode SAU cc.bundle IN ('" . implode("','", $related_content) . "'))";
$join_definition = [
'table' => 'node__field_list',
'field' => 'entity_id',
'left_table' => $table,
'left_field' => 'nid',
'operator' => '=',
'extra' => $extra,
];
$join = Views::pluginManager('join')->createInstance('standard', $join_definition);
$this->query->addRelationship('cc', $join, $table);
Este posibil să adăugați la „extra” condițiile ca interogare originală în modul arătat în documentație, respectând parantezele și condiția SAU?
$table = 'node_field_data';
$related_content = ['option_1','option_2'];
$join_definition = [
'table' => 'node__field_list',
'field' => 'entity_id',
'left_table' => $table,
'left_field' => 'nid',
'operator' => '=',
'extra' => [
[
'field' => 'șters',
„valoare” => 0,
],
[
'field' => 'langcode',
'left_field' => 'langcode',
],
[
'field' => 'pachet',
„valoare” => $conținut_relatat,
'operator' => 'IN',
],
],
];
Ultima îmbinare adaugă numai condiții AND pentru fiecare element din tabloul „extra”, dar nu știu cum pot adăuga un SAU între două condiții sau paranteze pentru a grupa unele.