TYPO3 TCA 类型 "select" 性能问题

TYPO3 TCA type "select" performance issue

是否可以将 TCA 字段类型 "select" 用于具有数千个条目的 table?

不应显示带有条目的选择框(否则记录会加载几分钟,或者出现内存限制或最大执行时间错误),但类似于搜索字段(类似于现有向导 "suggest" ) 或记录浏览器(如 TCA 类型 "group" 有)。

寻找 group 并将 internal_type 设置为 db 作为 select 类型的替代;这正是您在这里需要的。这是唯一允许您的特定用例的字段类型。

备选方案包括为字段使用 input 类型并使用向导对其进行匹配,然后配置向导以替换原始字段并且仅显示向导。

不要忘记检查您要列出的 table 的 SQL 密钥。如果您的列表使用未索引的列,您可以通过简单地为您使用的列添加 SQL 索引来最大限度地减少时间。

我使用的是旧的 TCA 字段类型 'group',这也解决了 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
            ]
        ]
    ]
]

一个选项是将字段设置为 "readonly"。当然不能在 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
],

TCA 类型 "group" 和(非常重要!)设置 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: This property does not really exist for group-type fields. It is needed as a workaround for an Extbase limitation. It is used to resolve dependencies during Extbase persistence. It should hold the same values as property allowed. Notice that only one table name is allowed here in contrast to the property allowed itself.