我试图生成属于同一视图的两个显示的并集,并共享相同的字段和过滤条件。
我在网上发现了两篇似乎指向正确方向的文章:
我试图根据我的需要调整后者:
use Drupal\views\Views;
use Drupal\views\ViewExecutable;
function my_modul_views_pre_execute(ViewExecutable $view) {
if ($view->id() == 'VIEW_ID') {
if ($view->current_display == 'DISPLAY_2') {
$view2 = Views::getView('VIEW_ID');
$view2->build('DISPLAY_1');
$view->build_info['query']
// ->fields('TABLE_ALIAS_1', array('FIELD_1', 'FIELD_2'))
->union(
$view2->build_info['query']
->range()
// ->fields('TABLE_ALIAS_2', array('FIELD_1', 'FIELD_2'))
);
$view->build_info['count_query']
->union(
$view2->build_info['count_query']
->range()
);
}
}
}
在此表单中,会生成以下错误:SQLSTATE[42601]: Syntax error: 7 ERROR: each UNION query must have the same number of columns
。对生成的SQL的观察表明,列数确实存在差异。但是,SELECT
周围UNION
语句中的列来自相应显示的上下文过滤器和关系,这些列不同。
上面的第二个链接表明指定所需的字段可以解决这个问题(请参阅上面代码中注释掉的行),但我无法完成这项工作。
如何找出TABLE_ALIAS_1和TABLE_ALIAS_2是什么?或者是否允许任意值?
如何指定字段名称(FIELD_1,FIELD_2)?它是为SQL查询生成的计算机名称,标签还是名称?
我非常感谢任何帮助。
此致 史蒂夫