从TYPO3 6.1中的Extbase映射到“pages”表

时间:2013-07-29 15:52:44

标签: typo3 extbase

我使用域模型Message创建了一个扩展程序。该模型与TYPO3 pages(具有页面详细信息的那个,如title,issite_root等)表有一个关系m:n。但是,通过使用mapping to existing tables选项,它会给我type错误说明页面:

The configured type field for table "pages" is of type int(11) unsigned
This means the type field can not be used for defining the record type. 
You have to configure the mappings yourself if you want to map to this
table or extend the correlated class

所以我只是创建没有映射的关系,以便稍后我可以从setup.txt映射它。

enter image description here

我在Pages中创建了模型MyExt/Classes/Domain/Model/,其中包含MyExt/Classes/Domain/Repository/中的所有getter / setter和存储库。

在我的setup.txt中,我这样做了:

config.tx_extbase {
    persistence{
        enableAutomaticCacheClearing = 1
        updateReferenceIndex = 0
        classes {
        Tx_Playfield_Domain_Model_Pages {
            mapping {
                    tableName = pages
                columns {
                                uid.mapOnProperty               = uid
                                pid.mapOnProperty               = pid
                                sorting.mapOnProperty           = sorting
                                title.mapOnProperty             = title
                                subtitle.mapOnProperty          = subtitle
                            }
                }
            }
      }
    }
}

但是当我尝试访问我创建的Pages模型时,

var_dump($this->pagesRepository->findByUid(74));

搜索不存在的tx_playfield_domain_model_pages,显示

Table 'typo3.tx_playfield_domain_model_pages' doesn't exist: SELECT tx_playfield_domain_model_pages.* FROM tx_playfield_domain_model_pages WHERE tx_playfield_domain_model_pages.uid = '74' LIMIT 1

我在这里缺少什么?

更新

在关注@Michael建议的http://t3-developer.com/extbase-fluid/cheats-extbase/model/tabelle-pages-in-extbase/后,我从empty result获得了$this->pagesRepository->findByUid(74)

setup.txt正在加载。我这样做是为了检查它:

plugin.tx_playfield{
settings{
 temp=yes
}
}

这是从我的控制器访问的。

2 个答案:

答案 0 :(得分:4)

您是否有可能未创建 Pages 域模型(在扩展构建器中或根本不创建)?文件my_ext/Classes/Domain/Model/Pages.php需要存在。检查您的“Pages”域模型是否具有 Map to existing table 属性设置为 pages 的属性,它应该如下所示:

enter image description here

我不知道你的错误究竟在哪里,但我在扩展构建器中做了一些修改并使其工作。您可以通过将扩展 playfield 与我的临时扩展 testfield Download it here (updated)进行比较来找到答案。


顺便说一句,您不需要映射您不希望在前端显示的属性,除非它们的名称不同。

        mapping {
            tableName = pages
            columns {
                title.mapOnProperty = title
                subtitle.mapOnProperty = subtitle
            }
        }

答案 1 :(得分:1)

我认为你必须使用驼峰大小写字母(类名)编写映射。虽然this post是德语版,但我认为代码可能会对您有所帮助。作者添加了他将要使用的一些字段,并在扩展的typoscript中添加了一个映射(参见那里的示例代码)。德语文本中最重要的部分是这个例子的设计只是为了从数据库中读取。如果要使用模型创建新页面,则至少(在模型类中)添加TCA和setter以使其正常工作。