如何从sys_categories获取项目

时间:2019-02-14 23:20:26

标签: typo3 categories extbase sys

从类别中获取项目的最佳方法是什么。

我有一个大约有40个类别的项目,总共有3000个项目和4个级别。

我从TYPO3 self by collections中找到了一种方法,但是我必须将它们添加到类别手册中吗?

我看到TYPO3博客扩展采用另一种方式,即在模型类别中增加了一个“ posts”列和一个objecttorage。因此不必添加项目/帖子。

当我有3个类别的列表,每个类别有4到5个子类别,每个约有100到250个项目时,听起来像Blog的第二种方式听起来更好,但是这种性能更好吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以构建查询并从数据库中自己获取所有相关项。

// get QueryBuilder for table 'sys_category_record_mm'
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_category_record_mm');

// query the table
$result = $queryBuilder
    ->select('uid_foreign,tablenames')
    ->from('sys_category_record_mm')
    ->where($queryBuilder->expr()->eq('uid_local', $uidOfYourCategory))
    ->execute()
    ->fetchAll();

现在,$result是一个数组,其所有子级的ID为$uidOfYourCategory。您可以使用此数组从存储库中获取项目。

如果只需要tt_content中的项目,或者只需要一个名为tx_yourtable的表,则可以向查询中添加andWhere,如下所示:

$result = $queryBuilder
    ->select('uid_foreign,tablenames')
    ->from('sys_category_record_mm')
    ->where($queryBuilder->expr()->eq('uid_local', $uidOfYourCategory))
    ->andWhere($queryBuilder->expr()->eq('tablenames', 'tx_yourtable'))
    ->execute()
    ->fetchAll();