golang gorm 要求 ThreeSceneJson的SceneID存在时候 ,Object3DJson 才存在相等的SceneID,Object3DJson的SceneID和Object3DJson的Uuid 作为联合主键。如何实现增删改查
时间: 2024-03-27 08:38:35 浏览: 15
针对这个要求,可以先创建两个 GORM 模型,一个是 `ThreeSceneJson`,一个是 `Object3DJson`。
在 `Object3DJson` 模型中,可以定义联合主键:
```go
type Object3DJson struct {
SceneID string `gorm:"primaryKey"`
Uuid string `gorm:"primaryKey"`
Name string
}
```
在 `ThreeSceneJson` 模型中,可以定义一个一对多的关系:
```go
type ThreeSceneJson struct {
SceneID string `gorm:"primaryKey"`
Object3DJsons []Object3DJson `gorm:"foreignKey:SceneID"`
}
```
这样,当 `ThreeSceneJson` 存在时,可以通过关联查询获取到对应的 `Object3DJson` 列表,从而实现查询操作。对于增加和修改操作,可以先根据 `SceneID` 查询到对应的 `ThreeSceneJson`,然后将新的 `Object3DJson` 添加到 `Object3DJsons` 中即可。对于删除操作,则可以直接删除对应的 `Object3DJson` 对象。
示例代码如下:
```go
func FindBySceneID(sceneID string) (*ThreeSceneJson, error) {
db := GetDB()
var threeSceneJson ThreeSceneJson
if err := db.Preload("Object3DJsons").First(&threeSceneJson, "SceneID = ?", sceneID).Error; err != nil {
return nil, err
}
return &threeSceneJson, nil
}
func SaveOrUpdateObject3DJson(object3DJson *Object3DJson) error {
db := GetDB()
var threeSceneJson ThreeSceneJson
if err := db.First(&threeSceneJson, "SceneID = ?", object3DJson.SceneID).Error; err != nil {
return err
}
threeSceneJson.Object3DJsons = append(threeSceneJson.Object3DJsons, *object3DJson)
if err := db.Save(&threeSceneJson).Error; err != nil {
return err
}
return nil
}
func DeleteObject3DJson(object3DJson *Object3DJson) error {
db := GetDB()
if err := db.Delete(object3DJson).Error; err != nil {
return err
}
return nil
}
```
需要注意的是,这里的示例代码仅供参考,具体实现还需要根据具体业务逻辑进行调整。