I have a custom entity one of whose fields is defined as
$fields['file'] = BaseFieldDefinition::create('file') ->setDescription('Reference to the built-in core File entity type.') ->setLabel('File') ->setRequired(TRUE) ->setSetting('file_extensions', 'pdf rtf doc docx') ->setSetting('max_filesize', '20MB') ->setSetting('description_field', TRUE) ->setDisplayOptions('form', ['type' => 'file']) ->setDisplayOptions('view', ['type' => 'file']);
I have no problem getting to the fields of the referenced File
entity from instances of my own entity type. So for example, these statements work as expected:
$filename = $my_entity->file->entity->filename->value; $username = $my_entity->file->entity->uid->entity->name->value;
But when I try to use the fields of the referenced File
entity with a TableSort
which I want to plug into an entity query on my custom entity type,
$header['name'] = [ 'data' => 'File Name', 'field' => 'file.entity.filename', 'specifier' => 'file.entity.filename', ]; $header['user'] = [ 'data' => 'Uploaded By', 'field' => 'file.entity.uid.entity.name', 'specifier' => 'file.entity.uid.entity.name', ]; ... $query->tableSort($header);
… I get the error message
Uncaught PHP Exception Drupal\Core\Entity\Query\QueryException: "'file' not found" ...
For the syntax of the $header
array I’m largely relying on clues I got from another StackExchange question, in which Berdir recommends that we look at the load()
and buildHeader()
methods of the core UserListBuilder
class. Unfortunately, that example appears to be using fields values which are stored directly in the base table, so I’m falling back on the assumption that since we’re in entity query land, the same syntax described in the documentation for QueryInterface::condition
would be expected.
I tried to comment on the StackExchange question I quoted above, but this forum won’t allow me to comment (my "reputation" isn’t sufficiently robust for commenting). So I suppose my worst-case scenario would be for a moderator to tell me I shouldn’t have posted this question because it duplicates another question on which I’m not allowed to comment. 😩
I’ve looked at a number of the open issues, such as this one, and even one that’s been open since Drupal 4, but I didn’t see anything which shed any light on the problem.
Thanks for any pointers in the right direction.