Я пытаюсь создать собственный фильтр просмотра, и в методе запроса мне нужно создать это соединение.
LEFT JOIN список node__field_list ON node_field_data.nid = list.entity_id
И list.deleted = 0
И (list.langcode = node_field_data.langcode ИЛИ list.bundle IN ('option_1','option_2'))
Использование документации для ViewsJoinHandler
, мне удалось создать объединение, но я не смог воссоздать условные операторы в свойстве «extra», как предлагалось в документации.
$ таблица = 'node_field_data';
$related_content = ['option_1','option_2'];
$extra = "cc.deleted = 0 И (cc.langcode = node_field_data.langcode ИЛИ cc.bundle IN ('" . implode("','", $related_content) . "'))";
$join_definition = [
'таблица' => 'node__field_list',
'поле' => 'entity_id',
'left_table' => $таблица,
'left_field' => 'нид',
'оператор' => '=',
'дополнительно' => $дополнительно,
];
$join = Views::pluginManager('join')->createInstance('standard', $join_definition);
$this->query->addRelationship('cc', $join, $table);
Можно ли добавить к «дополнительным» условиям исходный запрос, как показано в документации, соблюдая скобки и условие ИЛИ?
$ таблица = 'node_field_data';
$related_content = ['option_1','option_2'];
$join_definition = [
'таблица' => 'node__field_list',
'поле' => 'entity_id',
'left_table' => $таблица,
'left_field' => 'нид',
'оператор' => '=',
'дополнительно' => [
[
'поле' => 'удалено',
'значение' => 0,
],
[
'поле' => 'код языка',
'left_field' => 'код языка',
],
[
'поле' => 'комплект',
'значение' => $related_content,
'оператор' => 'В',
],
],
];
Последнее соединение добавляет только условия И для каждого элемента в «дополнительном» массиве, но я не знаю, как добавить ИЛИ между двумя условиями или скобками, чтобы сгруппировать некоторые из них.