如何在Drupal 8中生成两个视图显示的UNION?

时间:2018-06-10 16:37:47

标签: drupal-views drupal-8

我试图生成属于同一视图的两个显示的并集,并共享相同的字段和过滤条件。

我在网上发现了两篇似乎指向正确方向的文章:

  • one创建两个不同的视图并对它们执行联合;
  • the other做了我想要的更多(两个都在一个视图中显示)。

我试图根据我的需要调整后者:

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查询生成的计算机名称,标签还是名称?

我非常感谢任何帮助。

此致 史蒂夫

0 个答案:

没有答案