【问题标题】:Why doesn't the view use the database table I defined in hook_views_data()?为什么视图不使用我在 hook_views_data() 中定义的数据库表?
【发布时间】:2012-02-18 13:29:12
【问题描述】:

我的模块视图集成有问题。我需要提供有关添加视频和时间戳的用户的信息。视频字段是一个 CCK 嵌入式媒体字段,它存储在 content_field_3d_party_video 表中。

架构由以下代码定义。

function MODULE_schema() {
  $schema = array();
  
  $schema['video_data'] = array(
      'description' => t('Users and timestamps for video field'),
      'fields' => array(
        'value' => array(
          'description' => t('Emfield value'),
          'type' => 'varchar',
          'length' => '255',
          'not null' => TRUE,
          'default' => '',
        ),
        'uid' => array(
          'description' => t('User id'),
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'default' => 0,
        ),
        'timestamp' => array(
          'description' => t('Timestamp'),
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'default' => 0,
        ),
      ),
      'primary key' => array('value'),
      'indexes' => array(
        'timestamp' => array('timestamp'),
        'uid' => array('uid'),
      ),
    );
  
  return $schema;
}

hook_views_data() 实现如下。

function MODULE_views_data() {
  $data = array();
    
  $data['video_data']['table']['group'] = t('Video Data');
    
    $data['video_data']['table']['join'] = array(
        'node' => array(
            'left_table' => 'content_field_3d_party_video',
            'left_field' => 'field_3d_party_video_value',
            'field' => 'value',
        ),
        'users' => array(
            'left_field' => 'uid',
            'field' => 'uid',
        ),
    );
    
    $data['video_data']['value'] = array(
        'title' => t('Video value'),
        'relationship' => array(
            'base' => 'content_field_3d_party_video',
            'base field' => 'field_3d_party_video_value',
            'field' => 'value',
            'handler' => 'views_handler_relationship',
            'label' => t('Video value'),
        ),
    );

    $data['video_data']['uid'] = array(
        'title' => t('User id'),
        'relationship' => array(
            'base' => 'users',
            'base field' => 'uid',
            'field' => 'uid',
            'handler' => 'views_handler_relationship',
            'label' => t('User id'),
        ),
    );
    
    $data['video_data']['timestamp'] = array(
        'title' => t('Timestamp field'),
        'field' => array(
            'handler' => 'views_handler_field_date',
            'click sortable' => TRUE,
        ),
        'sort' => array(
            'handler' => 'views_handler_sort_date',
        ),
        'filter' => array(
            'handler' => 'views_handler_filter_date',
        ),
    );
    
    return $data;
}

该表未包含在为视图生成的 SQL 查询中。

SELECT node.nid AS nid,
   node.title AS node_title,
   node.language AS node_language,
   node_data_field_3d_party_video.field_3d_party_video_embed AS node_data_field_3d_party_video_field_3d_party_video_embed,
   node_data_field_3d_party_video.field_3d_party_video_value AS node_data_field_3d_party_video_field_3d_party_video_value,
   ...
   node.type AS node_type,
   node.vid AS node_vid
 FROM node node 
 LEFT JOIN content_field_3d_party_video content_field_3d_party_video_video_data ON value = content_field_3d_party_video_video_data.field_3d_party_video_value
 LEFT JOIN users users_video_data ON uid = users_video_data.uid
 LEFT JOIN content_field_3d_party_video node_data_field_3d_party_video ON node.vid = node_data_field_3d_party_video.vid
 WHERE ...

你能帮帮我吗?

【问题讨论】:

标签: view drupal drupal-6


【解决方案1】:

这是 OP 之前在问题中发布的解决方案。

要正确连接用于 CCK 字段的表,我们必须将 node_data_field_3d_party_video 指定为 left_table,而不是 content_field_3d_party_video

$data['video_data']['table']['join'] = array(
    'node' => array(
        'left_table' => 'node_data_field_3d_party_video',
        'left_field' => 'field_3d_party_video_value',
        'field' => 'value',
    ),
    'users' => array(
        'left table' => 'users',
        'left_field' => 'uid',
        'field' => 'uid',
    ),
);

【讨论】:

    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多