我使用域模型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
映射它。
我在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
}
}
这是从我的控制器访问的。
答案 0 :(得分:4)
您是否有可能未创建 Pages 域模型(在扩展构建器中或根本不创建)?文件my_ext/Classes/Domain/Model/Pages.php
需要存在。检查您的“Pages”域模型是否具有 Map to existing table 属性设置为 pages 的属性,它应该如下所示:
我不知道你的错误究竟在哪里,但我在扩展构建器中做了一些修改并使其工作。您可以通过将扩展 playfield 与我的临时扩展 testfield :Download it here (updated)进行比较来找到答案。
顺便说一句,您不需要映射您不希望在前端显示的属性,除非它们的名称不同。
mapping {
tableName = pages
columns {
title.mapOnProperty = title
subtitle.mapOnProperty = subtitle
}
}
答案 1 :(得分:1)
我认为你必须使用驼峰大小写字母(类名)编写映射。虽然this post是德语版,但我认为代码可能会对您有所帮助。作者添加了他将要使用的一些字段,并在扩展的typoscript中添加了一个映射(参见那里的示例代码)。德语文本中最重要的部分是这个例子的设计只是为了从数据库中读取。如果要使用模型创建新页面,则至少(在模型类中)添加TCA和setter以使其正常工作。