Symfony + Doctrine对给定数据库建模的问题

时间:2017-06-23 05:43:05

标签: php mysql symfony doctrine-orm doctrine

我有一个数据库,它将不断被自动导入填充。因此,我无法更改数据库结构,必须围绕数据库构建Doctrine模型。因此,我为此生成了一个模型,并且在我的源代码中大多数工作正常,但特别是对于下面的表格。

@PUT
    @Path("/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "Update Employee", response = Employee.class)
    @ApiResponses(value = { 
    @ApiResponse(code = 200, message = Responses.MESSAGE_200, response = Employee.class)) })
    public Response updateEmployee(
            @PathParam("id") UUID id,
                @RequestBody String requestBody) throws JsonProcessingException {
}

Doctrine正在生成一对一的映射,例如,在设备和RAM表之间,我认为有什么不对。 问题是,表共享主键(DeviceId)。因此,如果设备表中存在ID为1的设备,则如果deviceType为“RAM”,则RAM表中还有一个数据集。 (在deviceType表中定义)。 ID 2例如是处理器,因此在设备和处理器中都有一个条目,ID都为2.依此类推......设备表中的数据集条目始终具有deviceType,在deviceType表中定义。 / p>

我不是数据库专家,但它实际上不是一个关系,而不是一对一的映射吗?如何将设备(RAM,处理器)的子类型映射到Doctrine中的父表?

谷歌搜索后,我认为单表继承是我正在寻找的,但我不知道Doctrine是否可以正确处理我的数据库模型,因为唯一的东西是Subtypes(RAM,处理器...)与父类(设备)共享是id字段。每个表的所有其他字段都完全不同。

非常重要的是,Doctrine不会触及我的数据库结构,因为导入将不再起作用。

有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我发现,来自http://doctrine-orm.readthedocs.io/en/stable/tutorials/composite-primary-keys.html的简单派生身份用例可能适合我。让我坚持页面上的示例:从示例User类到地址类的方向非常简单。但如果我想实现反面(从用户那里获取地址)我应该简单地添加字段"地址"到用户类。但是,如果我这样做,doctrine想要为我的用户类添加一个外键。这将改变数据库模型,我不想要的。在我的真实数据库中,没有从父类(Device)到子类(例如处理器)的外键。

有什么想法吗?