Db::setSysCategoryConstraint()
\nn\t3::Db()->setSysCategoryConstraint($queryBuilder = NULL, $sysCategoryUids = [], $tableName = '', $categoryFieldName = 'categories', $useNotIn = false);
Add constraint for sys_category / sys_category_record_mm to a QueryBuilder. Restricts the results to the specified sys_categories UIDs.
$queryBuilder = \nn\t3::Db()->getQueryBuilder( $table );
\nn\t3::Db()->setSysCategoryConstraint( $queryBuilder, [1,3,4], 'tx_myext_tablename', 'categories' );
Copied!
@param \TYPO3\CMS\Core\Database\Query\QueryBuilder $querybuilder
@param array $sysCategoryUids
@param string $tableName
@param string $categoryFieldName
@param boolean $useNotIn
@return \TYPO3\CMS\Core\Database\Query\QueryBuilder
Source Code
public function setSysCategoryConstraint ( &$queryBuilder = null, $sysCategoryUids = [], $tableName = '', $categoryFieldName = 'categories', $useNotIn = false )
{
if (!$sysCategoryUids) return $queryBuilder;
$and = [
$queryBuilder->expr()->eq('categoryMM.tablenames', $queryBuilder->expr()->literal($tableName)),
$queryBuilder->expr()->eq('categoryMM.fieldname', $queryBuilder->expr()->literal($categoryFieldName))
];
if (!$useNotIn) {
$and[] = $queryBuilder->expr()->in( 'categoryMM.uid_local', $sysCategoryUids );
$queryBuilder->andWhere(...$and);
} else {
$and[] = $queryBuilder->expr()->notIn('categoryMM.uid_local', $sysCategoryUids);
$queryBuilder->andWhere(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->isNull('categoryMM.uid_foreign'),
$queryBuilder->expr()->andX(...$and)
)
);
}
$queryBuilder->leftJoin(
$tableName,
'sys_category_record_mm',
'categoryMM',
$queryBuilder->expr()->eq('categoryMM.uid_foreign', $tableName . '.uid')
)->groupBy('uid');
return $queryBuilder;
}
Copied!