【发布时间】:2017-07-25 14:08:21
【问题描述】:
是否有可能对包含数千个条目的表使用 TCA 字段类型“选择”?
不应显示带有条目的选择框(否则记录会加载几分钟,或者您会遇到内存限制或最大执行时间错误),而是应该显示搜索字段(如现有向导“建议”)或记录浏览器(就像 TCA 类型“组”一样)。
【问题讨论】:
标签: typo3 typo3-extensions typo3-tca
是否有可能对包含数千个条目的表使用 TCA 字段类型“选择”?
不应显示带有条目的选择框(否则记录会加载几分钟,或者您会遇到内存限制或最大执行时间错误),而是应该显示搜索字段(如现有向导“建议”)或记录浏览器(就像 TCA 类型“组”一样)。
【问题讨论】:
标签: typo3 typo3-extensions typo3-tca
可以使用 TCA 类型“组”和(非常重要!)设置 foreign_table:
'config' => [
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'fe_users',
'foreign_table' => 'fe_users'
],
来自官方文档 (https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Type/Group.html#foreign-table):
foreign_table:对于组类型字段,此属性实际上并不存在。需要它作为 Extbase 限制的解决方法。它用于解决 Extbase 持久性期间的依赖关系。它应该与允许的属性保持相同的值。请注意,与允许的属性本身相比,此处只允许一个表名。
【讨论】:
查找group 并将internal_type 设置为db 作为select 类型的替代;这正是您在这里需要的。这是唯一允许您的特定用例的字段类型。
替代方法包括为字段使用input 类型并为其配备向导,然后配置向导以替换原始字段并仅显示向导。
不要忘记检查您列出的表的 SQL 键。如果您的列表使用未编入索引的列,您可以通过简单地为您使用的列添加 SQL 索引来最大限度地减少时间。
【讨论】:
group 类型字段。也许您没有声明allowed 表列表?
\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapFactory::setRelations。如果你阅读了这个并调用了函数的主体,你就可以知道哪些 TCA 参数被用于这两种类型,以及哪些类型有资格被识别为适当的关系。
我正在使用旧的 TCA 字段类型“组”,它也解决了 TYPO3 CMS 8 中的这种行为
'my_select_field' => [
'label' => 'My select field',
'config' => [
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'my_foreign_table_name',
'size' => 1,
'minitems' => 0,
'maxitems' => 1,
'suggestOptions' => [
'default' => [
'pidList' => 0,
'searchCondition' => 'hidden=0',
'searchWholePhrase' => 1
]
]
]
]
【讨论】:
group 类型支持单个表就好了 - 但您可以使用 allowed 设置来控制它,而不是 table 设置。
一个选项是将字段设置为“只读”。当然,不能在 TYPO3 BE 中编辑此字段,但如果数据即将到来,例如从外部来源,这是我可以忍受的缺点。
'config' => [
'type' => 'select',
'foreign_table' => 'fe_users',
'size' => 1,
'minitems' => 1,
'maxitems' => 2, // it has to be > 1 because else a selectbox is rendered
'readOnly' => 1, // readOnly because of performance issues
],
【讨论】: