Typo3 中的持久值对象
Persisting value objects in Typo3
我有一个 Money
class,它扩展了 AbstractValueObject
,具有 $amount
(整数)和 $currency
(字符串)属性。我有一个 AbstractEntity
和一个 $price
属性 持有 Money
的实例。如何让 Typo3 保留该值对象?如何定义映射?
来自 Doctrine,我希望它会保留在两列中 price_amount
和 price_currency
。
Extbase 做事有点不同 - 所以 value objects 需要存储在它们自己的 table 中,并且对象之间的关系像实体一样使用标识符存储。
实体和 VO 之间唯一真正的区别是持久性管理器在寻找 VO 以实现持久性时将使用 property values
(标识符字段除外),而 identifier
将用于实体。
- 因此您需要将值对象的 database schema 添加到
ext_tables.sql
并且 table 应该包含一个自动递增的 uid
字段以及字段你需要你的 VO。确保在 amount
和 currency
列上创建组合唯一索引。
- 定义 TCA 映射,然后您可以在创建存储库时直接保留值对象,或者通过将它们附加到聚合根对象并保留这些对象。
您实体上的 price
属性 应该是数据库模式中的一个整数,因为 extbase 将存储对 VO uid 的引用(如果您只引用一个 Money 对象在您的实体上)并且如果您希望存储 collection 货币对象,Extbase 将存储您的实体对象与货币 VO 之间的关系数。
我有一个 Money
class,它扩展了 AbstractValueObject
,具有 $amount
(整数)和 $currency
(字符串)属性。我有一个 AbstractEntity
和一个 $price
属性 持有 Money
的实例。如何让 Typo3 保留该值对象?如何定义映射?
来自 Doctrine,我希望它会保留在两列中 price_amount
和 price_currency
。
Extbase 做事有点不同 - 所以 value objects 需要存储在它们自己的 table 中,并且对象之间的关系像实体一样使用标识符存储。
实体和 VO 之间唯一真正的区别是持久性管理器在寻找 VO 以实现持久性时将使用 property values
(标识符字段除外),而 identifier
将用于实体。
- 因此您需要将值对象的 database schema 添加到
ext_tables.sql
并且 table 应该包含一个自动递增的uid
字段以及字段你需要你的 VO。确保在amount
和currency
列上创建组合唯一索引。 - 定义 TCA 映射,然后您可以在创建存储库时直接保留值对象,或者通过将它们附加到聚合根对象并保留这些对象。
您实体上的 price
属性 应该是数据库模式中的一个整数,因为 extbase 将存储对 VO uid 的引用(如果您只引用一个 Money 对象在您的实体上)并且如果您希望存储 collection 货币对象,Extbase 将存储您的实体对象与货币 VO 之间的关系数。