How to use a referenced entity’s values in a TableSort?

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.

This article was republished from its original source.
Call Us: 1(800)730-2416

Pixeldust is a 20-year-old web development agency specializing in Drupal and WordPress and working with clients all over the country. With our best in class capabilities, we work with small businesses and fortune 500 companies alike. Give us a call at 1(800)730-2416 and let’s talk about your project.

FREE Drupal SEO Audit

Test your site below to see which issues need to be fixed. We will fix them and optimize your Drupal site 100% for Google and Bing. (Allow 30-60 seconds to gather data.)

Powered by

How to use a referenced entity’s values in a TableSort?

On-Site Drupal SEO Master Setup

We make sure your site is 100% optimized (and stays that way) for the best SEO results.

With Pixeldust On-site (or On-page) SEO we make changes to your site’s structure and performance to make it easier for search engines to see and understand your site’s content. Search engines use algorithms to rank sites by degrees of relevance. Our on-site optimization ensures your site is configured to provide information in a way that meets Google and Bing standards for optimal indexing.

This service includes:

  • Pathauto install and configuration for SEO-friendly URLs.
  • Meta Tags install and configuration with dynamic tokens for meta titles and descriptions for all content types.
  • Install and fix all issues on the SEO checklist module.
  • Install and configure XML sitemap module and submit sitemaps.
  • Install and configure Google Analytics Module.
  • Install and configure Yoast.
  • Install and configure the Advanced Aggregation module to improve performance by minifying and merging CSS and JS.
  • Install and configure Schema.org Metatag.
  • Configure robots.txt.
  • Google Search Console setup snd configuration.
  • Find & Fix H1 tags.
  • Find and fix duplicate/missing meta descriptions.
  • Find and fix duplicate title tags.
  • Improve title, meta tags, and site descriptions.
  • Optimize images for better search engine optimization. Automate where possible.
  • Find and fix the missing alt and title tag for all images. Automate where possible.
  • The project takes 1 week to complete.