2017-07-25 66 views
0

是否有可能使用TCA字段類型「選擇」的表有數千個條目?TYPO3 TCA類型「選擇」性能問題

不應該顯示帶有條目的選擇框(否則記錄會加載分鐘,或者您會收到內存限制或最大執行時間錯誤),但是像搜索字段(如現有嚮導「建議」)或記錄瀏覽器(如TCA類型「組」)。

回答

1

有可能與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: 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.

0

尋找groupinternal_type設置爲db作爲替代select類型;這正是你在這裏所需要的。這是允許您特定用例的唯一字段類型。

替代選項包括對字段使用input類型,並將其與嚮導擬合,然後配置該向導,以便它替換原始字段並僅顯示嚮導。

不要忘記檢查你列出的表的SQL鍵。如果您的列表使用未索引的列,則可以通過簡單地爲所用列添加SQL索引來將時間縮短到極限。

+0

我擔心它必須是鍵入「select」或「inline」,因爲Extbase存儲庫只能正確處理這些類型 - 對於「subrecord」的查詢似乎只能用這些類型。例如:$ query-> equals('mySelectField.uid',123); – Sven

+0

聽起來像別的東西,可能是你的領域模型註釋,應該歸咎於此。沒有理由爲什麼Extbase存儲庫不應該像處理任何其他(有效的TCA)類型那樣處理「組」類型字段。也許你沒有聲明'允許的'表列表? –

+0

請參閱'\ TYPO3 \ CMS \ Extbase \ Persistence \ Generic \ Mapper \ DataMapFactory :: setRelations'。如果您閱讀並調用函數的主體,您可以知道哪種類型的TCA參數可以使用,哪種類型被認爲是適當的關係。 –

0

我使用的是舊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 
      ] 
     ] 
    ] 
] 
+0

正如我的問題所述,我知道類型「組」。但不幸的是,這種字段類型是不可能的,因爲組可以包含來自多個表的記錄,因此很多Extbase操作是不可能的。 Extbase在許多方面不支持字段類型「group」,例如存儲庫中的數據庫查詢,如$ query-> equals('mySelectField.uid',123); – Sven

+0

這是一個不正確的斷言。 'group'類型支持單個表格 - 但你可以用'allowed'設置來控制它,而不是'table'。 –

+0

是的,但即使您只在選項「允許」中命名一個表,但Extbase存儲庫中的查詢無法處理與TCA類型爲「group」的其他表的關係。 – Sven

0

一種選擇是設置字段設置爲「只讀」。當然,然後在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 
],