TYPO3 8.7.10:"未知列' sys_file_reference.uid_local:type'在' where子句'"在文件类型为

时间:2018-02-19 11:36:06

标签: typo3 typo3-8.x typo3-extensions extension-builder3

大家!

在新的TYPO3 8.7.10网站中,我刚刚使用Extension Builder创建了一个新扩展。在该扩展中,有一个模型对象(" FurnitureFamily")具有文件类型属性(我称之为"符号")。我的扩展程序还有一个插件,显示所有家具系列的列表。我用我的插件创建了一个家具系列和一个新页面。

Extension Builder中的新模型对象

A new model object in Extension Builder

/**
 * name
 *
 * @var string
 * @validate NotEmpty
 */
protected $name = '';

/**
 * symbol
 *
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */
protected $symbol = null;

问题是,我没有显示包含我唯一记录的列表,而是出现以下错误:

  

糟糕,发生错误!代码:20180219055419589a6076

借助 fh_debug 扩展程序,我可以获得有关错误的更多信息:

  

糟糕,发生错误!代码:20180219055419589a6076未知栏' sys_file_reference.uid_local:键入'在' where子句'异常代码:1472074485文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php行:393 fh_debug trace:file:/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php" ; line:226 function:getObjectDataByQuery file:/typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php" line:126 function:getObjectDataByQuery file:/typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php" line:113 function:getObjectDataByQuery file:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:567函数:getFirst文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:503 function:mapResultToPropertyValue file:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:290 function:mapObjectToClassProperty file:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:186函数:thawProperties文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" line:144 function:mapSingleRow

奇怪的是,当我删除属性"符号"时,显示列表(仅显示属性" name")。

作为一个新安装,我尝试将我的数据库与特定的数据进行比较,但没有任何更改。

我的问题是:如何纠正错误?

谢谢。

1 个答案:

答案 0 :(得分:0)

这个问题已经很老了,但是我在TYPO3版本9中仍然遇到这个问题,发现它与extension-builder有关,后者正在为字段uid_local:type创建一些条目。
错误消息只是阻塞了所有内容,因为该字段没有定义类型。

在此屏幕快照中,您可以看到在表sys_file_reference中定义了具有该名称的字段: enter image description here

将带有表字段的长列表向下滚动可以发现以下内容: enter image description here

可以找到config.items的定义,其中包含一些可以选择的典型定义。即使只有一项,结构对于某种形式的元素选择也是很典型的。我可以想象表单元素,例如选择下拉框,单选按钮或复选框。所有这些元素都具有这种代码结构作为定义。

所以我删除错误消息的方法是为字段定义一个“类型”:

$tmp_ttnews_vp_columns['uid_local:type']['config']['type'] = 'select';

另一方面,该字段通常不会显示,因为表sys_file_reference从不遵循extbase-logic,并且工作方式不同。 因此,删除文件中的一些代码非常容易且有用。
your_extension/Configuration/TCA/Overrides/sys_file_reference.php
该表中有一个块,其中包含有关新字段或更改字段的定义,可以删除该列表上方或下方的大多数代码。

这是在列定义上方,可以删除: enter image description here

也可以删除以下所需代码下面的块: enter image description here

有关type字段的文档可以在here中找到,在底部的一章中还介绍了有关组合符号的说明,只是不使用uid_local而是使用文件file:type

有许多情况分别详细说明了为什么它不起作用,在已知情况下,我可以稍后根据评论扩展列表:

  • 由扩展程序生成器创建的默认映射如下所示:

config.tx_extbase {
persistence {
 classes {

   WDB\TtnewsVp\Domain\Model\FileReference {
     mapping {
       tableName = sys_file_reference
       recordType = Tx_TtnewsVp_FileReference
     }
   }

 }
}
}

在这里,recordType = Tx_TtnewsVp_FileReference行正在干扰和引发问题中所述的错误消息。
这种TypoScript通常位于扩展文件夹根目录下的ext_typoscript_setup.typoscript文件中,因此即使不包含静态模板,也总是将其加载。

  • 类中的注释可能是错误的,包括诸如错字之类的简单错误。 注释和类型提示必须正确(也许丢失的注释比错误的注释要好,但是我从未尝试过使用丢失的注释或类型提示)。