更新和extbase记录时是否可以抑制tstamp更新?

时间:2017-06-20 14:00:25

标签: typo3 extbase typo3-7.6.x

我有一个TYPO3扩展(extbase,TYPO3 7.6),在控制器showAction内,我增加了给定记录的viewCounter属性,然后在相应的存储库上调用$repo->update($entity)类。

问题是,在本网站的另一个地方,有一个“已更改”记录列表,它使用这些记录的tstamp字段。所以现在的问题是,每次加载实体时,计数器都会增加,而extbase内部也会自动更新tstamp值。在这种情况下,现在根本就是需要的。

所以我的问题是:是否可以为某个查询停用或绕过此行为,或者一般情况下(之后再次激活它)?当然,我可以完全绕过extbase ORM和用我自己的普通SQL更新该记录,但我认为这是一个不太好的解决方案: - )

1 个答案:

答案 0 :(得分:1)

通过查看代码可以最好地回答这样的问题:

由于addCommonDateFieldsToRow(从updateObject通过addCommonFieldsToRow调用),回复tstamp查询会自动更新update值。如果$dataMap->getModificationDateColumnName() !== null发生if the TCA $controlSection['tstamp'] of the respective table is set(通常就是这种情况),就会发生这种自动现象。

由于$ dataMap已缓存,暂时取消设置$GLOBALS['TCA']['your_table']['ctrl']['tstamp']将无效。在addCommonDateFieldsToRow被调用之前似乎没有任何钩子入口点(有emitAfterUpdateObjectSignal,但在更新后称为 - 并且有< em>没有 emit*Before*UpdateObjectSignal)。

补救措施可能是实施UPDATEquery_preProcessAction摘要,并从tstamp中移除$fields_values以查询您的查询。这个钩子将被调用每个 TYPO3更新查询。

另一种解决方法(我经常使用的一种)是扩展(XCLASS)有问题的核心代码。在您的情况下,您可以扩展\TYPO3\CMS\Extbase\Persistence\Generic\Backend::addCommonDateFieldsToRow,不要为您的特殊域对象添加tstamp列。

正如我在你对你的问题的评论中所说:最好的解决方案通常是绕过extbase规则和限制,而不是浪费时间来处理extbase规则和限制。

PS:您可能还会考虑更改数据模型并将视图计数器移动到单独的表中。