Вы здесь

Проблема с join в hook_views_data

0

Добрый день, помогите пожалуйста разобраться.
Пытаюсь использовать hook_views_data для подключения сторонней таблицы в Views.

Для примера взял готовую базу данных : https://dev.mysql.com/doc/employee/en/sakila-structure.html
Хочу с помощью хука подключить таблицы employees (поля emp_no и first_name) и titles (поля emp_no и title)

На выходе хочу получить Views которая в одной колонке выведет First name во второй Title, т.е. с join-ить таблицы.
Хук стал делать по данному примеру: https://api.drupal.org/api/views/views.api.php/function/hook_views_data/...
Получилось сделать следующее:

<?php

function employees_views_data() {

  $data['employees']['table']['group'] = t('Employees table');
  $data['employees']['table']['base'] = array(
    'field' => 'emp_no',
    'title' => t('Employees table'),
    'help' => t('Employees table contains employees data.'),
    'database' => 'employees',
    'weight' => -10,
  );

  $data['employees']['table']['join'] = array(
    'titles' => array(
      'left_field' => 'emp_no',
      'field' => 'emp_no',
    ),
  );

  $data['employees']['emp_no'] = array(
    'title' => t('Employees content'),
    'help' => t('Some example employees.'),
    'relationship' => array(
      'base' => 'titles',
      'base field' => 'emp_no',
      'handler' => 'views_handler_relationship',
      'label' => t('Default label for the relationship'),
      'title' => t('Title shown when adding the relationship'),
      'help' => t('More information on this relationship'),
    ),
  );

  $data['employees']['first_name'] = array(
    'title' => t('First name'),
    'help' => t('First name.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );

  $data['titles']['title'] = array(
    'title' => t('Title'),
    'help' => t('Title.'),
    'field' => array(
      'handler' => 'views_handler_field',
      'click sortable' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );   

  return $data;
}

По умолчанию информацию из таблицы employees тянет, и всё отображает, но вот с join и relationship я запутался, вроде как во вьюхе появился на выбор relationship, но при его выборе нет нового поля Title.
Подскажите пожалуйста, где ошибка, первый раз с этим хуком работаю. Спасибо

Версия Drupal: 
7.x
Связанные проекты: 
Views
Вопрос задан 11.10.2018 - 19:35

Ответы

0

Опиши там же таблицу titles также, как описал таблицу employees, только без join-ов:

  $data['titles']['table']['group'] = t('Employees table');

  $data['titles']['table']['base'] = array(
     'field' => 'emp_no',
     'title' => t('Titles table'),
     'help' => t('Titles.'),
     'database' => 'employees',
     'weight' => -9,
 );

 $data['titles']['title'] = array(
   'title' => t('Title'),
   // и так далее
Ответ дан 17.10.2018 - 00:24

Ммм... то есть в этом же файле опишу ещё одну таблицу... а за счёт чего будет связь происходить, т.е. где описано что в таблице titles поле emp_no это внешний ключ к emp_no в таблице employees

Комментарий оставлен 17.10.2018 - 15:40