У меня есть пользовательский объект с полем, которое определяется следующим образом.
$fields['файл'] = BaseFieldDefinition::create('файл')
->setDescription('Ссылка на встроенный основной тип объекта File.')
->setLabel('Файл')
-> setRequired (ИСТИНА)
->setSetting('file_extensions', 'pdf rtf doc docx')
->setSetting('max_filesize', '20MB')
->setSetting('поле_описания', ИСТИНА)
->setDisplayOptions('форма', ['тип' => 'файл'])
->setDisplayOptions('вид', ['тип' => 'файл']);
У меня нет проблем с доступом к полям ссылки Файл
сущность из экземпляров моего собственного типа сущности. Так, например, эти строки работают как положено.
$filename = $my_entity->file->entity->filename->value;
$username = $my_entity->file->entity->uid->entity->name->value;
Когда я пытаюсь использовать поля указанного Файл
сущность с Сортировка таблицы
, который я хочу подключить к запросу объекта для моего пользовательского типа объекта, код выдает исключение.
$ заголовок ['имя'] = [
'данные' => 'Имя файла',
'поле' => 'file.entity.filename',
'specifier' => 'file.entity.filename',
];
$ заголовок ['пользователь'] = [
'данные' => 'Кем загружено',
'поле' => 'файл.entity.uid.entity.name',
'specifier' => 'file.entity.uid.entity.name',
];
// ¦
$запрос->tableSort($заголовок);
Неперехваченное исключение PHP Drupal\Core\Entity\Query\QueryException: «файл не найден»
Для синтаксиса $ заголовок
массив я в основном полагаюсь на подсказки, которые я получил от Сортировка таблиц с EntityQuery, в котором Бердир рекомендует взглянуть на нагрузка()
и построитьЗаголовок()
методы UserListBuilder
учебный класс. К сожалению, этот пример, похоже, использует значения полей, которые хранятся непосредственно в базовой таблице, поэтому я возвращаюсь к предположению, что, поскольку мы находимся в области запросов сущностей, тот же синтаксис, описанный в QueryInterface::условие()
можно было бы ожидать.
Я просмотрел ряд открытых вопросов, таких как Сортировка таблицы игнорирует «поле», всегда добавляет заголовок в качестве параметра запроса заказа и Очистка таблицы, но я не видел ничего, что пролило бы свет на проблему.