SF DB JOIN

安装: 1

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

公开问题: 0

类型:typo3-cms-extension

dev-main 2023-06-17 12:56 UTC

This package is auto-updated.

Last update: 2024-09-17 15:28:13 UTC


README

这是一个TYPO3演示扩展,用于展示如何通过TYPO3 API从数据库获取记录的可能性。

请查看ProductRepository类。目前有4种主要方法收集记录

  • 通过Extbase查询
  • 通过注入到Extbase查询中的TYPO3 QueryBuilder
  • 通过直接使用TYPO3 QueryBuilder
  • 通过ContentObjectRenderer的getRecords()

Extbase查询

尽可能频繁和可能地使用它。

优点

  • 它很短(代码少)
  • 工作空间覆盖集成
  • 语言覆盖集成
  • 翻译记录尊重ORDER BY
  • COUNT在JOIN表上工作。Extbase将SELECT改为COUNT(DISTINCT table.uid)

缺点

  • 总是SELECT *
  • 不能更改SELECT部分。无法使用AVG()、SUBSTRING()...等
  • 没有实现GROUP BY
  • 没有排序子记录的可能性

带有Extbase查询的TYPO3 QueryBuilder

对于单表使用是可行的。由于COUNT问题,不要用于JOIN

优点

  • 可以修改所有查询部分以满足需求
  • 可扩展性:将QueryBuilder发送到钩子、事件或其他方法,您可以更改一切

缺点

  • COUNT在JOIN表上不工作。SELECT仍然是COUNT()而不是COUNT(DISTINCT table.uid)
  • JOIN会产生笛卡尔积
  • 在JOIN表上必须自行添加GROUP BY
  • 如果您正在使用ONLY_FULL_GROUP_BY,必须将SELECT中所有列添加到GROUP BY中。
  • 必须自行正确JOIN表。不要忘记添加表名、字段名以及所有其他匹配的列(来自TCA)
  • 必须自行添加存储PID
  • 修改查询以正确处理语言是您的工作

纯TYPO3 QueryBuilder

仅适用于TYPO3专业人士。您真的必须知道自己在做什么。

优点

  • 想做什么就做什么
  • COUNT()总是正确的,因为它没有被自动化设置

缺点

  • 结果集与QueryResultInterface不兼容。因此,您正在处理已获取的记录
  • 必须调用versionOL()
  • 必须调用getLanguageOverlay()
  • 如果您需要排序和翻译的记录,必须自行添加一个非常大的额外查询
  • 必须自行将结果集映射到域模型
  • 必须使用自己的分页/分页器,或者必须以数组形式处理完整结果集
  • 必须自行添加存储PID
  • 收集JOIN查询的方法可能是一项大量且非常耗时的工作

cObj的getRecords

非常简单。fluid包的Typo3DatabaseProcessor也使用了这种方法。翻译和工作空间将为您完成。

优点

  • 简单
  • 语法已经使用了很长时间
  • 可以修改SELECT部分
  • 可以工作与JOIN
  • GROUP BY也是可能的

缺点

  • 记住列标识符的特殊语法:{#column}
  • 多个JOIN可能会非常混乱
  • 由于没有表别名,您必须始终使用完整的表名:tx_sfjoin_domain_model_product.title而不是p.title
  • 允许的SELECT函数的固定集合:COUNT|MAX|MIN|AVG|SUM|DISTINCT
  • 在翻译记录上无法使用ORDER BY。记录以默认语言排序。记录翻译为1:1不尊重ORDER BY。