I have a custom table that contains (for simplicity) two fields:
On my node content type, I have an integer type field called: field_dashboard_id. All my nodes have the field_dashboard_id set to ids from the custom table. I have a content view that I would like to also display the client id from the custom table. (FYI I am able to create a view if I use Dashboard Entries instead of Content but I want to use Content and join to Dashboard Entries)
I tried the following code but when I try to add a relationship, I am not seeing my custom table in Views.
/**
* Implements hook_views_data().
*/
function mydashboard_views_data() {
$data = [];
$data['mydashboard_site']['table']['group'] = t('Dashboard');
$data['mydashboard_site']['table']['base'] = [
'field' => 'id',
'title' => t('Dashboard entries'),
'help' => t('Contains a list of dashboard entries.'),
];
$data['mydashboard_site']['table']['join'] = array(
'node' => array(
'left_table' => 'node__field_dashboard_id',
'left_field' => 'entity_id',
'field' => 'id',
),
);
$data['mydashboard_site']['id'] = [
'title' => t('ID'),
'help' => t('Unique Site ID.'),
'field' => [
'id' => 'numeric',
],
'filter' => [
'id' => 'numeric',
],
'argument' => [
'id' => 'numeric',
],
'sort' => [
'id' => 'standard',
],
'relationship' => [
'base' => 'node', // The name of the table to join with.
'base field' => 'field_dashboard_id', // The name of the field on the joined table.
// 'field' => 'nid' -- see hook_views_data_alter(); not needed here.
'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'),
'extra' => [
[
'field' => 'field_dashboard_id',
'value' => 'value',
'operator' => '=',
'numeric' => true,
],
],
],
];
$data['mydashboard_site']['client_id'] = [
'title' => t('Client ID'),
'help' => t('The client id'),
'field' => [
'id' => 'standard',
],
'filter' => [
'id' => 'string',
],
'argument' => [
'id' => 'string',
],
];
return $data;
}
Update
Also tried the following:
$data['mydashboard_site']['table']['join'] = [
'node__field_dashboard_id' => [
'left_field' => 'field_dashboard_id_value',
'field' => 'id',
],
];
'relationship' => [
'base' => 'node__field_dashboard_id', // The name of the table to join with.
'base field' => 'entity_id', // The name of the field on the joined table.
// ID of relationship handler plugin to use.
'id' => 'standard',
// Default label for relationship in the UI.
'label' => t('Example node'),
],