TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出

TYPO3 DatabaseQueryProcessor: Multiple Outputs of same UIDs

我正在尝试使用 DatabaseQueryProcessor 获取某些类别(在 pid 1 上),它几乎完美地工作,但某些类别在变量的输出中多次显示。

(我使用的是无头 typo3 10:https://github.com/TYPO3-Initiatives/headless

brandcategories = JSON
brandcategories {
    dataProcessing {
        10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
        10 {
            as = brandcategories
            selectFields = sys_category.uid,sys_category.title
            table = sys_category
            pidInList = 1
            where = parent=13
            where.insertData = 1
            join = sys_category_record_mm on sys_category_record_mm.uid_local = 
            sys_category.uid
        }
    }
}

这给了我以下输出:

 [
  { "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
  { "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
  { "data": { "uid": 16, "title": "Dedon", "pid": 1, "t3ver_state": 0 } },
  { "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
  { "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
  { "data": { "uid": 19, "title": "Extremis", "pid": 1, "t3ver_state": 0 } }
]

如你所见,uid 14 显示了两次,还有 Manutti。 如果有人能告诉我如何过滤它,那就太好了,所以我只获得每个 ID 一次。谢谢!

一般来说,您可以使用两个不同的选项来限制这样的查询结果:

  1. 通过使用 mysql-表达式 DISTINCT,我没有经验,但如果它可以在 TypoScript 中使用,例如 selectFields = DISTINCT sys_category.uid,sys_category.title.
    this page 上写着

    There is no support for DISTINCT, a ->groupBy() has to be used instead.

    我不确定这是否也适用于您的 TypoScript 问题。

  2. 通过在 TypoScript 中使用 groupBy 对结果进行分组:
    groupBy = sys_category.uid

可以找到关于这两种方法的一般解释 here,该解释仅与 MySQL 有关,与 TypoScript 无关。

此外,您可以为连接添加更多约束,这样就不需要上述选项了。