Можно ли использовать ограничительные контейнеры в запросе к базе данных в eID-скрипте? - PullRequest
1 голос
/ 23 мая 2019

В eID-скрипте я использую QueryBuilder , чтобы получить некоторые записи из базы данных. Запрос также возвращает скрытые и удаленные записи, хотя я ожидал бы, что DefaultRestrictionContainer исключит эти записи. Нужна ли какая-то инициализация, чтобы заставить работать контейнеры ограничения? Можно ли вообще использовать ограничительные контейнеры в eID-скриптах?

Вызов $queryBuilder->getRestrictions() показывает, что DefaultRestrictionContainer существует. Вызов $queryBuilder->getSQL() показывает, что ограничения не добавляются в запрос.

Запрос так же прост:

/** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('my_table');
$statement = $queryBuilder
    ->select('a', 'b')
    ->from('my_table')
    ->where(
        $queryBuilder->expr()->eq('c', $queryBuilder->createNamedParameter(123, \PDO::PARAM_INT))
    )
    ->execute();

1 Ответ

1 голос
/ 23 мая 2019

Проблема здесь в том, что ограничения по умолчанию требуют полностью загруженного TCA .В сценариях eID никакой TCA не загружен, поэтому вам нужно будет сделать это вручную, например, с помощью EidUtility::initTCA().

Обратите внимание, что этот метод устарел и будет удален с помощью TYPO3v10, где TCAзагружается в любое время.

...