Typo3 中的持久值对象

Persisting value objects in Typo3

我有一个 Money class,它扩展了 AbstractValueObject,具有 $amount(整数)和 $currency(字符串)属性。我有一个 AbstractEntity 和一个 $price 属性 持有 Money 的实例。如何让 Typo3 保留该值对象?如何定义映射?

来自 Doctrine,我希望它会保留在两列中 price_amountprice_currency

Extbase 做事有点不同 - 所以 value objects 需要存储在它们自己的 table 中,并且对象之间的关系像实体一样使用标识符存储。
实体和 VO 之间唯一真正的区别是持久性管理器在寻找 VO 以实现持久性时将使用 property values(标识符字段除外),而 identifier 将用于实体。

  • 因此您需要将值对象的 database schema 添加到 ext_tables.sql 并且 table 应该包含一个自动递增的 uid 字段以及字段你需要你的 VO。确保在 amountcurrency 列上创建组合唯一索引。
  • 定义 TCA 映射,然后您可以在创建存储库时直接保留值对象,或者通过将它们附加到聚合根对象并保留这些对象。

您实体上的 price 属性 应该是数据库模式中的一个整数,因为 extbase 将存储对 VO uid 的引用(如果您只引用一个 Money 对象在您的实体上)并且如果您希望存储 collection 货币对象,Extbase 将存储您的实体对象与货币 VO 之间的关系数。