使用非TYPO3表的Extbase映射

时间:2013-03-20 17:58:10

标签: model-view-controller typo3 extbase

我也有类和两个非TYPO3表。我将非TYPO3表定义为没有uid,pid等列的表。

我的两个班级:

  1. class Tx_Abc_Domain_Model_Location extends Tx_Extbase_DomainObject_AbstractEntity
  2. class Tx_Abc_Domain_Model_Facility extends Tx_Extbase_DomainObject_AbstractEntity
  3. 我的两个表(包含列):

    1. 位置
      • 邮政编码
      • 城市
      • facility_id
    2. 设施
      • facility_id
      • 名称
    3. 我已经映射了这样的属性:

      config.tx_extbase.persistence.classes {
        Tx_Abc_Domain_Model_Location.mapping {
          tableName = locations
          columns {
              zipcode.mapOnProperty = zipcode
              city.mapOnProperty = city
              facility_id.mapOnProperty = facility
          }
        }
        Tx_Abc_Domain_Model_Facility.mapping {
          tableName = facilities
          columns {
              facility_id.mapOnProperty = uid
              name.mapOnProperty = name
          }
        }
      }
      

      我的问题:

      我的位置模型的facility属性得到类型Tx_Abc_Domain_Model_Facility,当我通过LocationRepository查找位置时,它构建了一个包含设施模型的位置模型。

      出现问题,当我正在进行搜索时,会返回几个结果。即邮政编码12345的位置有两个不同的设施(表格位置有两排不同的facility_ids),那么我希望得到两个位置模型,每个模型都有正确的设施模型。

      但我获得了两个位置模型,它们内部具有相同的设施模型。他们拥有第一个找到位置的所有设施。

      即使我将facility属性的类型更改为整数,也有错误的ID。但是如果我在存储库中启用原始查询结果,我会得到正确的ID。

      当我向两个表添加一个uid列时,我也得到了正确的id或模型。

      是否有可能在没有uid列的情况下使用Extbase模型映射表格?

      感谢。

2 个答案:

答案 0 :(得分:3)

好的,我上一个问题的答案是:是的,没有可能在没有uid列的情况下使用Extbase模型映射表。

forge上有一张现有的门票:http://forge.typo3.org/issues/25984

原因似乎是Tx_Extbase_Persistence_Mapper_DataMapper类中mapSingleRow()方法中的硬编码$row['uid']

答案 1 :(得分:1)

如果你需要映射的表不是很多,那么解决方法可能是为这些表创建视图来映射uid。

即:

CREATE VIEW tx_abc_domain_model_facility AS
    SELECT facility_id AS uid, facilities.* FROM facilities;