enablecolumns 和 QueryBuilder 在 TYPO3 9.5

Chr*_*ret 1 typo3 extbase typo3-extensions typo3-9.x

我有一个关于 TYPO3 9.5 中 enablecolumns 和 QueryBuilder 的问题:

在 TCA 中,我定义了 enablecolumns:

    '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',
      ],
    ]
Run Code Online (Sandbox Code Playgroud)

在存储库中,我创建了一个自定义查询:

    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_myext_domain_model_table'); 
    $result = $queryBuilder
      ->select('*')
      ->from('tx_myext_domain_model_table')
      ->where($where)
      ->execute();
Run Code Online (Sandbox Code Playgroud)

如果我调试 SQL

$queryBuilder->getSQL();
Run Code Online (Sandbox Code Playgroud)

我看到已删除和隐藏的条件,但没有 fe_group

如果我添加

$queryBuilder
->getRestrictions()
->removeAll()
->add(GeneralUtility::makeInstance(FrontendGroupRestriction::class))
->add(GeneralUtility::makeInstance(DeletedRestriction::class))
->add(GeneralUtility::makeInstance(HiddenRestriction::class));
Run Code Online (Sandbox Code Playgroud)

在执行查询之前,添加了 fe_groups 条件。

我错过了什么?

谢谢基督徒

小智 5

这是因为QueryBuilder默认情况下使用DefaultRestrictionContainer仅添加以下限制:

protected $defaultRestrictionTypes = [
    DeletedRestriction::class,
    HiddenRestriction::class,
    StartTimeRestriction::class,
    EndTimeRestriction::class
];
Run Code Online (Sandbox Code Playgroud)

参考:

您可能正在寻找的是FrontendRestrictionContainer使用以下默认限制的 :

protected $defaultRestrictionTypes = [
    DeletedRestriction::class,
    FrontendWorkspaceRestriction::class,
    HiddenRestriction::class,
    StartTimeRestriction::class,
    EndTimeRestriction::class,
    FrontendGroupRestriction::class,
];
Run Code Online (Sandbox Code Playgroud)

参考: https //github.com/TYPO3/TYPO3.CMS/blob/9.5/typo3/sysext/core/Classes/Database/Query/Restriction/FrontendRestrictionContainer.php#L33-L40

一种可能的解决方案是使用此容器而不是默认容器:

$container = GeneralUtility::makeInstance(FrontendRestrictionContainer::class);
$queryBuilder->setRestrictions($container);
Run Code Online (Sandbox Code Playgroud)