У меня есть настраиваемый тип поля, org_person
, с настроенным автозаполнением для поиска нашей конечной точки «люди». Он сохраняет что-то вроде Джон Смит (12345)
к свойству значения ($свойства['значение']
).
Конечная точка выглядит примерно так:
[{id, имя, название, ...}, {id, имя, название, ...},...]
Моя цель состоит в том, чтобы при сохранении объекта (и cron) запросить мою конечную точку и сохранить более 30 свойств в базе данных.
Мне нужно иметь возможность фильтровать и сортировать эти значения в представлениях, поэтому вычисление этих данных в режиме реального времени исключено.
Насколько я понимаю, мне нужно установить класс свойства, который будет использоваться для генерации значения свойства. Что-то вроде:
$properties['имя'] = DataDefinition::create('любой')
->setLabel(новый TranslatableMarkup('Имя'))
->setComputed(ИСТИНА)
-> установить только для чтения (ИСТИНА)
->setClass('\Drupal\my_module\TypedDataName');
Тогда в моем TypedDataName
Класс, я получаю значение вроде:
публичная функция getValue() {
если ($this->обработано !== NULL) {
вернуть $this->processed;
}
$values = $this->getParent()->getValue();
$submitted_value = $values['value'];
$id = EntityAutocomplete::extractEntityIdFromAutocompleteInput($submitted_value);
// Запускаем fetch здесь, чтобы получить свойство 'name'
$response = $this->_fetchName($id);
$значение = $ответ[0]["имя"];
$это->обработано = $значение;
вернуть $this->processed;
}
Это работает, хотя кажется, что он работает на дисплее, а не извлекается из базы данных.
Кроме того, если я добавлю другое свойство, например заглавие
(или остальные), он будет выполнять эту выборку на каждый имущество.
Как это можно сделать с помощью одной выборки, чтобы заполнить более 30 свойств при сохранении?