Создать проблему ассоциаций при вставке в связанную таблицу - PullRequest
0 голосов
/ 16 октября 2018
type Group struct {
        gorm.Model
        CreatedBy       uint64
        GroupOrders []GroupOrder gorm:"many2many:group_orders;association_jointable_foreignkey:group_id;jointable_foreignkey:group_id;"
    }

    type GroupOrder struct {
        gorm.Model
        GroupID uint64
        OrderID     uint64
        UserID      uint64
        Group       Group

}

Я пытаюсь вставить запись, подобную этой

newGroup: = &Group{
            CreatedBy: newGroupDetails.UserID,
            GroupOrders: []GroupOrder{
                {
                    OrderID:     newGroupDetails.OrderID,
                    UserID:      newGroupDetails.UserID,
                },
            },
        }

Я создаю запись, используя это.

db.Create(newGroup)

Правильно создает запись в модели группыно при вставке в модель GroupOrder он вставляет значение NULL в столбец group_id.

После этого он запускает запрос

INSERT INTO group_orders (group_id) SELECT ? FROM DUAL WHERE NOT EXISTS (SELECT * FROM group_orders WHERE group_id = ?)[30 30] 1  pkg=mysql

, а затем вставляет еще одну запись в модель GroupOrder со всеми пустыми полями.но добавление поля идентификатора группы в качестве ранее вставленного значения group_order_id.

Результирующие данные в mysql

GroupOrder

    | id | group_id | order_id | user_id |
    +----+---------------+----------+---------+
    | 30 |             0 |  8764822 |  678972 |
    | 31 |            30 |     NULL |    NULL |

Group

    | id | created_by |
    +----+------------+
    | 18 |     678972 |

По крайней мере, следует вставить 18 вместо 30 впоследний столбец group_id строки в таблице GroupOrder.

Почему это происходит?Может кто-нибудь объяснить, если есть ошибка.

PS: Для краткости удалил несколько других столбцов из обеих моделей.

1 Ответ

0 голосов
/ 16 октября 2018

Нашел ошибку сам.Группа имеет много-много ассоциаций с GroupOrder и не много-много.Удалил это и все заработало.

Надеюсь, это кому-нибудь поможет :)

...