Вы здесь

Как связать по идентификатору две кастомные сущности?

0

Добрый день, имеется просто модуль который средствами Entity API создаёт две сущности: Employee и Department
Первая сущность состоит из полей: EID (идентификатор), FULLNAME и DEPARTMENT_ID (идентификатор записи из сущности Department)
Вторая сущность из полей: DID (идентификатор) и TITLE
Сам модуль:

employee.info

name = Employee
description = Employee
version = 7.x-1.0
core = 7.x
dependencies[] = entity

employee.install

<?php

/**
 * hook_schema()
 */
function employee_schema() {
  $schema['employees'] = array(
    'fields' => array(
      'eid' => array(
        'description' => 'Employee ID',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'fullname' => array(
        'description' => 'Employee full name',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
      ),
      'department_id' => array(
        'description' => 'Foreign key to department',
        'type' => 'int',
        'not null' => FALSE,
      ),
    ),
    'primary key' => array('eid'),
  );

  $schema['departments'] = array(
    'fields' => array(
      'did' => array(
        'description' => 'Department ID',
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'title' => array(
        'description' => 'Department title',
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
      ),
    ),
    'primary key' => array('did'),
  );

  return $schema;
}

employee.module

<?php

/**
 * hook_entity_info()
 */
function employee_entity_info() {
  return array(
    'employee' => array(
      'label' => t('Employee'),
      'entity class' => 'Entity',
      'controller class' => 'EntityAPIController',
      'base table' => 'employees',
      'entity keys' => array(
        'id' => 'eid',
        'label' => 'fullname'
      ),
      'module' => 'employee',
    ),
    'department' => array(
      'label' => t('Department'),
      'entity class' => 'Entity',
      'controller class' => 'EntityAPIController',
      'base table' => 'departments',
      'entity keys' => array(
        'id' => 'did',
        'label' => 'title'
      ),
      'module' => 'employee',
    ),    
  );
}

Задача такая, что нужно сделать связь между двумя сущностями по полю DEPARTMENT_ID первой сущности и DID второй сущности.
Таким образом, что создвая Views и выбор к отображению сущности EMPLOYEE, я мог в RELATIONSHIP увидеть связь с сущностью DEPARTMENT (ну и собственно наоборот, создавая DEPARTMENT, видеть отношения с EMPLOYEE)

Версия Drupal: 
7.x
Категория: 
Entity APISchema API
Вопрос задан 05.11.2018 - 22:54

Ответы

0

Получилось

<?php

function employee_views_data_alter(&$data) {
  $data['employees']['departments']['relationship'] = array(
    'title' => t('Department relationship'),
    'label' => t('Department relationship'),
    'help' => t('Department relationship'),
    'handler' => 'views_handler_relationship',
    'base' => 'departments',
    'base field' => 'did',
    'relationship table' => 'employees',
    'relationship field' => 'department_id',
  );
  $data['departments']['employees']['relationship'] = array(
    'title' => t('Employee relationship'),
    'label' => t('Employee relationship'),
    'help' => t('Employeee relationship'),
    'handler' => 'views_handler_relationship',
    'base' => 'employees',
    'base field' => 'department_id',
    'relationship table' => 'departments',
    'relationship field' => 'did',
  );
}
Ответ дан 10.11.2018 - 10:03
0

Я могу ошибатся, но насколько помню, в Drupal нет внешних ключей. Вместо них используются пхп аналоги , такие как поля - relations. Следовательно добавьте к энтити поле которое будет указывать на поле другой энтити

Ответ дан 06.11.2018 - 08:43