Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 视图钩子视图查询改变连接_Join_Drupal 7_Drupal Views - Fatal编程技术网

Join 视图钩子视图查询改变连接

Join 视图钩子视图查询改变连接,join,drupal-7,drupal-views,Join,Drupal 7,Drupal Views,在hook\u视图\u查询\u alter中,我构建连接查询,如下所示: $join = new views_join(); $join->table = 'table_2'; $join->field = 'field_2'; $join->left_table = 'table_1'; $join->left_field = 'field_1'; $join->type = 'LEFT'; $join->extra = array( array(

在hook\u视图\u查询\u alter中,我构建连接查询,如下所示:

$join = new views_join();
$join->table = 'table_2';
$join->field = 'field_2';
$join->left_table = 'table_1';
$join->left_field = 'field_1';
$join->type = 'LEFT';
$join->extra = array(
  array(
     'table' => 'table_2',
     'field' => 'field_3',
     'value' => 'table_1.field_4',
  ),
);
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = table_2.field_4
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = 'table_2.field_4'
查询应如下所示:

$join = new views_join();
$join->table = 'table_2';
$join->field = 'field_2';
$join->left_table = 'table_1';
$join->left_field = 'field_1';
$join->type = 'LEFT';
$join->extra = array(
  array(
     'table' => 'table_2',
     'field' => 'field_3',
     'value' => 'table_1.field_4',
  ),
);
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = table_2.field_4
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = 'table_2.field_4'
我的问题是这里的“值”=>“表1.字段4”。我无法将值设置为字段。它将其视为字符串值。所以在我的查询中,我有不需要的单引号

最后,我的查询如下所示:

$join = new views_join();
$join->table = 'table_2';
$join->field = 'field_2';
$join->left_table = 'table_1';
$join->left_field = 'field_1';
$join->type = 'LEFT';
$join->extra = array(
  array(
     'table' => 'table_2',
     'field' => 'field_3',
     'value' => 'table_1.field_4',
  ),
);
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = table_2.field_4
LEFT JOIN {table_2} table_2 ON table_1.field_1 = table_2.field_2 AND table_1.field_3 = 'table_2.field_4'

我不确定这是否是最好的解决方案,但是:

$join = new views_join();
$join->table = 'table_2';
$join->field = 'field_2';
$join->left_table = 'table_1';
$join->left_field = 'field_1';
$join->type = 'LEFT';

$join->extra = 'table_1.field_3 = table_2.field_4';
对我有用