TYPO3 9.5 中的 enablecolumns 和 QueryBuilder
enablecolumns and QueryBuilder in TYPO3 9.5
我对 TYPO3 9.5 中的 enablecolumns 和 QueryBuilder 有疑问:
在 TCA 中,我定义了启用列:
'ctrl' => [
'title' => '....'
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'versioningWS' => 2,
'versioning_followPages' => true,
'origUid' => 't3_origuid',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l18n_parent',
'transOrigDiffSourceField' => 'l18n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'fe_group' => 'fe_group',
],
]
在存储库中我创建了一个自定义查询:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_myext_domain_model_table');
$result = $queryBuilder
->select('*')
->from('tx_myext_domain_model_table')
->where($where)
->execute();
如果我用
调试SQL
$queryBuilder->getSQL();
我看到删除和隐藏的条件但没有fe_group
如果我加上
$queryBuilder
->getRestrictions()
->removeAll()
->add(GeneralUtility::makeInstance(FrontendGroupRestriction::class))
->add(GeneralUtility::makeInstance(DeletedRestriction::class))
->add(GeneralUtility::makeInstance(HiddenRestriction::class));
在执行查询之前,添加了 fe_groups 条件。
我错过了什么?
谢谢
克里斯蒂安
这是因为 QueryBuilder
默认使用 DefaultRestrictionContainer
仅添加以下限制:
protected $defaultRestrictionTypes = [
DeletedRestriction::class,
HiddenRestriction::class,
StartTimeRestriction::class,
EndTimeRestriction::class
];
参考文献:
- https://github.com/TYPO3/TYPO3.CMS/blob/9.5/typo3/sysext/core/Classes/Database/Query/QueryBuilder.php#L86
- https://github.com/TYPO3/TYPO3.CMS/blob/9.5/typo3/sysext/core/Classes/Database/Query/Restriction/DefaultRestrictionContainer.php#L28-L33
您可能正在寻找的是使用以下默认限制的 FrontendRestrictionContainer
:
protected $defaultRestrictionTypes = [
DeletedRestriction::class,
FrontendWorkspaceRestriction::class,
HiddenRestriction::class,
StartTimeRestriction::class,
EndTimeRestriction::class,
FrontendGroupRestriction::class,
];
一种可能的解决方案是使用此容器而不是默认容器:
$container = GeneralUtility::makeInstance(FrontendRestrictionContainer::class);
$queryBuilder->setRestrictions($container);
我对 TYPO3 9.5 中的 enablecolumns 和 QueryBuilder 有疑问:
在 TCA 中,我定义了启用列:
'ctrl' => [
'title' => '....'
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'versioningWS' => 2,
'versioning_followPages' => true,
'origUid' => 't3_origuid',
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l18n_parent',
'transOrigDiffSourceField' => 'l18n_diffsource',
'delete' => 'deleted',
'enablecolumns' => [
'disabled' => 'hidden',
'fe_group' => 'fe_group',
],
]
在存储库中我创建了一个自定义查询:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_myext_domain_model_table');
$result = $queryBuilder
->select('*')
->from('tx_myext_domain_model_table')
->where($where)
->execute();
如果我用
调试SQL$queryBuilder->getSQL();
我看到删除和隐藏的条件但没有fe_group
如果我加上
$queryBuilder
->getRestrictions()
->removeAll()
->add(GeneralUtility::makeInstance(FrontendGroupRestriction::class))
->add(GeneralUtility::makeInstance(DeletedRestriction::class))
->add(GeneralUtility::makeInstance(HiddenRestriction::class));
在执行查询之前,添加了 fe_groups 条件。
我错过了什么?
谢谢 克里斯蒂安
这是因为 QueryBuilder
默认使用 DefaultRestrictionContainer
仅添加以下限制:
protected $defaultRestrictionTypes = [
DeletedRestriction::class,
HiddenRestriction::class,
StartTimeRestriction::class,
EndTimeRestriction::class
];
参考文献:
- https://github.com/TYPO3/TYPO3.CMS/blob/9.5/typo3/sysext/core/Classes/Database/Query/QueryBuilder.php#L86
- https://github.com/TYPO3/TYPO3.CMS/blob/9.5/typo3/sysext/core/Classes/Database/Query/Restriction/DefaultRestrictionContainer.php#L28-L33
您可能正在寻找的是使用以下默认限制的 FrontendRestrictionContainer
:
protected $defaultRestrictionTypes = [
DeletedRestriction::class,
FrontendWorkspaceRestriction::class,
HiddenRestriction::class,
StartTimeRestriction::class,
EndTimeRestriction::class,
FrontendGroupRestriction::class,
];
一种可能的解决方案是使用此容器而不是默认容器:
$container = GeneralUtility::makeInstance(FrontendRestrictionContainer::class);
$queryBuilder->setRestrictions($container);