extbase映射到现有表不起作用

时间:2010-10-28 12:23:37

标签: mapping persistence typo3 typoscript

我扩展了页面表,现在我想使用名为“Tags”的域对象中的一些数据。
所以我在/Configuration/TypoScript/setup.txt中尝试了以下内容:

plugin.myextension.persistence.classes.Tx_myextension_Domain_Model_Tag {
    mapping {
        tableName = pages
        recordType = Tx_myextension_Domain_Model_Tag
        columns {
            tx_myextension_tag_name.mapOnProperty = name
            uid.mapOnProperty = id
        }
    }
}

但似乎扩展试图访问表Tx_myextension_Domain_Model_Tag(不存在)

这是我收到的错误:

Tx_Extbase_Persistence_Storage_Exception_SqlError`

表'tx_myextension_domain_model_tag'不存在:SELECT tx_myextension_domain_model_tag。* FROM tx_myextension_domain_model_tag WHERE tx_myextension_domain_model_tag.id = '24'LIMIT 1

我做错了什么?

7 个答案:

答案 0 :(得分:3)

不要忘记将扩展名typoscript模板包含在您的模板中(模板>编辑整个模板>包含静态模板),否则不会评估您的setup.txt。

答案 1 :(得分:2)

您是否尝试过“config.tx_extbase”而不是“plugin.myextension”?

这样的东西
config.tx_extbase.persistence.classes.Tx_MyExtension_Domain_Model_Tag.mapping.tableName = pages

适合我。

答案 2 :(得分:2)

要检查哪些记录类型是可接受的,请使用BE中的配置模块,在$ TCA部分找到您的表(在这种情况下为[pages])并检查类型列(... [ctrl] [type] - 用于页面它是'doktype',它决定页面记录是标准页面还是sysfolder等。)。

此列在数据库中是tinyint(3),因此您无法将值'Tx_myextension_Domain_Model_Tag'写入其中。在您的ext新doktype中创建数字,并将recordType设置为它。

如果页面类型对您无关紧要,您可以从映射配置中删除recordType。

答案 3 :(得分:0)

Tx_myextension_Domain_Model_Tag是您对象的名称吗?但我想这不是您尝试访问的表的名称。所以我的猜测是你提供给值“tableName”的名称是错误的。 “页面”包含什么?

答案 4 :(得分:0)

您是否已将各个页面指定为记录类型Tx_myextension_Domain_Model_Tag? 它应该进入pages表的doctype字段(因此你需要更改该字段的mysql数据类型。 否则,Extbase不知道此特定页面是extbase记录而不是常规页面。 在Extbase中查看有关单表继承(STI)的更多信息:http://pascal-jungblut.com/blog/blog-post/2010/11/06/single-table-inheritance-in-extbase.html

答案 5 :(得分:0)

您是否在使用eID的typo3通话中执行此操作? 这里没有加载一些配置..

如果是,请尝试加载所有配置解决问题:

    ...
    $GLOBALS['TSFE'] = \t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS, $_GET["id"], 0, true);
    //$GLOBALS['TSFE'] = new $temp_TSFEclassName();
    $GLOBALS['TSFE']->connectToDB();
    $GLOBALS['TSFE']->initFEuser();
    $GLOBALS['TSFE']->determineId();
    $GLOBALS['TSFE']->getCompressedTCarray();
    $GLOBALS['TSFE']->initTemplate();
    $GLOBALS['TSFE']->getConfigArray();
    ...

答案 6 :(得分:0)

注意有关FE-Plugins的正确命名约定:

plugin.tx_myextension