Typo3 避免在中间表中存储数据时键入3后端工作流
我的情况如书中所述:Typo3 避免在中间表中存储数据时键入3后端工作流,typo3,relational-database,extbase,Typo3,Relational Database,Extbase,我的情况如书中所述: 我想将信息存储在中间表中,这是完全不推荐的 以下是上述链接书籍章节警告框中的引用: 不要在涉及域的中间表中存储数据。虽然TYPO3支持这一点(特别是与内联关系记录编辑(IRE)相结合),但这始终是一个迹象,表明可以对域模型进行进一步改进。中间表是并且应该始终是存储关系的工具,而不是其他工具。 假设您要存储一张CD及其包含的音乐曲目:CD--m:n(中间表)--Song。曲目编号可以存储在中间表的字段中。但是,曲目应存储为单独的域对象,并且连接应实现为CD--1:n--
我想将信息存储在中间表中,这是完全不推荐的 以下是上述链接书籍章节警告框中的引用: 不要在涉及域的中间表中存储数据。虽然TYPO3支持这一点(特别是与内联关系记录编辑(IRE)相结合),但这始终是一个迹象,表明可以对域模型进行进一步改进。中间表是并且应该始终是存储关系的工具,而不是其他工具。
假设您要存储一张CD及其包含的音乐曲目:
CD--m:n(中间表)--Song
。曲目编号可以存储在中间表的字段中。但是,曲目应存储为单独的域对象,并且连接应实现为CD--1:n--track--n:1--Song
所以我不想做那些不被推荐的事情。但是考虑到编辑的工作流程,推荐解决方案的结果给我带来了一些问题
为了继续使用此示例,我需要以下表格:
tx_extname_domain_model_cd
tx_extname_domain_model_cd_track_mm
tx_extname_domain_model_track (which holds the track number)
tx_extname_domain_model_track_song_mm
tx_extname_domain_model_song
据我所知,这将在编辑需要创建以下记录的情况下结束:
cd
歌曲的一条记录
- 现在,编辑器可以为
创建一条记录。曲目
在那里添加了曲目编号。
此外,还需要分配
记录和cd
歌曲
下面是我的问题:
cd
记录打开时,编辑无法直接访问歌曲
?
相反,她/他必须首先打开
曲目
记录,然后才能从那里导航到歌曲
sys\u file\u reference
也一样!但我想知道如何显示这些数据(因为IRE不可能,因为它只能用于1:n
关系()根据问题的不同,有时中间表是实体,有时不是。在本例中,中间表是曲目,其中包含:[uid、cd、song、track_no,…(定义曲目所需的任何其他内容)]
定义数据时要小心,不要让数据太高级。你要问自己的问题是:我是想按书编码,还是想创建一种务实的方法来解决客户的问题? 在这个特定的例子中,另一个问题是,最初发明Extbase的人有一个非常复杂和学术的方法,但当涉及到实用的使用和性能时,他们被自己的规则所阻碍,并坚持按书进行编码 特别是这个例子和警告消息显示了一种思维方式,这是原因之一,为什么我从来没有真正使用Extbase,而是使用核心API方法来创建性能和实用的查询,以获得所需的结果集。现在我们已经有了
原则
,这就像一种魅力,即使是智慧很有异国风味
当然,中间表
是一个好主意,当然那些中间表
可以而且应该用额外的数据字段来丰富,它们不需要第三、第四或第n个表来存储,即一组简单的下拉选项,因为这可以通过属性
configu轻松处理TCA中的红色,如下所示:
sys\u file\u reference
是最突出的例子,因为它提供的正是那种不应该被注入到其他表中的附加信息,猜猜看,TYPO3 core没有使用一行Extbase代码来处理该数据或核心表的几乎任何其他数据
回答您的最后一个问题:看一看好的旧IRE教程,了解如何使用中间内联表进行m:n连接。
一般来说,中间表根本不应该存储数据,因此这是本书中的警告。最好的选择是保留中间表,将CD和磁道存储在自定义实体中,并将它们与不包含任何不必要数据的mm表连接起来。@biesior这只回答了我的第三个问题。你能给我其他两个方面的提示吗问题?