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!