首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在TableSort中使用引用实体的值?

如何在TableSort中使用引用实体的值?
EN

Drupal用户
提问于 2022-04-29 19:11:37
回答 2查看 167关注 0票数 2

我有一个自定义实体,其中有一个字段,定义如下。

代码语言:javascript
复制
$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']);

从我自己的实体类型的实例中获取引用的File实体的字段是没有问题的。例如,这些行按预期工作。

代码语言:javascript
复制
$filename = $my_entity->file->entity->filename->value;
$username = $my_entity->file->entity->uid->entity->name->value;

当我试图将引用的File实体的字段与TableSort一起使用时,代码抛出一个异常,我希望将其插入自定义实体类型的实体查询中。

代码语言:javascript
复制
$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);

未被发现的PHP异常Drupal\Core\Entity\Query\QueryException:“未找到”

对于$header数组的语法,我主要依赖于从带有EntityQuery的表获得的线索,其中Berdir建议我们查看UserListBuilder类的load()buildHeader()方法。不幸的是,这个例子似乎使用的是直接存储在基表中的字段值,因此我回到了这样一个假设,即既然我们处于实体查询域,那么QueryInterface::condition()中描述的相同语法也会被期望。

我已经看过一些公开的问题,比如表排序忽略“字段”,始终将标题标题添加为订单查询参数。桌面清理,但是我没有看到任何能说明这个问题的东西。

EN

回答 2

Drupal用户

回答已采纳

发布于 2022-04-30 21:03:12

在内核中有一个bug,目前的解决方法是:

代码语言:javascript
复制
'specifier' => 'file.target_id.entity.filename',

原因是实体查询关系语法从连接支持开始,它先于核心中的实体引用支持,因此,虽然$entity->file->target_id->entity不受core支持,实体查询支持file.target_id.entity以指示它应该加入file字段指定的实体,实体id应该是target_id指定的。它有点笨重,但在当时,它是有效的。

它还应该能够计算出file.entity.filename,因为file字段的主属性名恰好是target_id,因此它可以将其扩展为file.target_id.entity.filename。但是,在Drupal\Core\Entity\Query\Sql\Tables非常复杂的情况下,类是非常复杂的,这个扩展对于共享表的情况有一个错误,这个错误将在https://www.drupal.org/project/drupal/issues/3278083中修复。

票数 2
EN

Drupal用户

发布于 2022-04-30 15:11:53

上面描述的故障似乎是错误FileItem插件中的结果。尽管字段类型插件索赔要求是一个实体引用( @FieldType注释中写的是category = @Translation("Reference")),但在所有其他方面--这是真的--对文档实体查询语法的支持已经中断。

在修复错误之前,解决方法是放弃FileItem字段类型实现的专门化,而使用普通的entity_reference字段。通过这一修改,上面的TableSort代码可以正常工作。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/310923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档