TYPO3 版本中同一张表上的双向 n:m 关系。 4.7.2

Posted

技术标签:

【中文标题】TYPO3 版本中同一张表上的双向 n:m 关系。 4.7.2【英文标题】:Bidirectional n:m relation on same table in TYPO3 vers. 4.7.2 【发布时间】:2012-07-18 08:15:46 【问题描述】:

在我们自己的扩展中,我们有一个应该与自身具有 n:m 关系的表。

我举个形象的例子(我们的真实案例类似): 让我们称该表为“员工”。 现在一个员工可以附属于其他员工,例如我编辑员工 A 并将其附加到员工 B。当我打开员工 B 时,我希望看到他对员工 A 有一个附件。

我在tca.php中尝试了如下配置:

'linked_with' => array (
  'exclude' => 0,
  'label' => 'LLL:EXT:my_ext/locallang_db.xml:my_table.linked_with',
  'config' => array(
    'type' => 'group',
    'internal_type' => 'db',
    'allowed' => 'my_table',
    'size' => 6,
     'MM' => 'my_table_linked_mm',
     'MM_opposite_field' => 'my_table'
  )
)

但是,当我这样做时,它只会保存一个方向的关系,即我在员工 A 中看到它与员工 B 有关系。但是当我打开员工 B 时,我看不到与员工 A 的任何关系.

在数据库中保存了一个条目:

uid_local:###员工 A### 的 UID uid_foreign:###员工 B### 的 UID 排序:0 sorting_foreign: 1

我做错了什么? 我在 Google/Internet 上找不到类似的案例 - 我发现的只是两个不同的表。

【问题讨论】:

【参考方案1】:

好吧,考虑两个表的情况。

A - MM - B

在这种情况下,您需要表 A 的 TCA 字段通过 MM 表链接到 B(使用 uid_local 作为本地 uid)和表 B 的 TCA 字段通过 MM 表链接到 A(使用 uid_foreign 作为本地 uid)

在这种情况下,您需要相同的内容,即linked_from 和 links_to 字段或类似字段,具有镜像配置。

【讨论】:

我该怎么做呢?我认为使用“'MM_opposite_field' => 'my_table'”我会实现这一目标。 关于如何在 TYPO3 中执行此操作有什么建议吗? 你知道当你必须连接两个不同的表时你会如何解决这个问题吗? 是的,我们在另一个扩展中已经有这样的配置了。【参考方案2】:

只是对其他搜索者的简短反馈: 不幸的是,迄今为止 TYPO3(版本 4.7.4)不支持此功能。 要实现此功能,您必须编写一个 userFunction。

【讨论】:

以上是关于TYPO3 版本中同一张表上的双向 n:m 关系。 4.7.2的主要内容,如果未能解决你的问题,请参考以下文章

与关联对象在同一张表上的多对多关系

实体框架代码优先,同一张表上的多对多关系

同一张表上的多个连接,在一个查询中计数

在同一张表上定义关系 Laravel 5.3

如何在 Oracle SQL 中查找和过滤同一张表上的数据

Mysql在同一张表上的多个左连接