stefanfroemken / sf-join
SF DB JOIN
dev-main
2023-06-17 12:56 UTC
Requires
- typo3/cms-core: ^12.3
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。