Необработанный запрос не заполняет связь один-ко-многим - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий запрос sqlite:

SELECT
    orders.id
    , orders.shop_id
    , tv.total_value
    , line_items.id
    , line_items.product_id
    , line_items.order_id
    , line_items.description
    , line_items.quantity
    , products.price AS 'line_items.price'
FROM orders
JOIN line_items ON line_items.order_id = orders.id
JOIN products ON line_items.product_id = products.id
JOIN (
        SELECT
                line_items.order_id
            , SUM(products.price * line_items.quantity) total_value
        FROM line_items
        LEFT JOIN products ON line_items.product_id = products.id
        GROUP BY
                line_items.order_id
        ) tv ON tv.order_id = orders.id

, который возвращает следующий набор данных:

SQL query dataset

сследующие модели:

type Order struct {
    ID         int64      `json:"id"`
    ShopID     int64      `json:"shopID"`
    TotalValue float64    `json:"total"`
    LineItems  []LineItem `json:"lineItems"`
}

type LineItem struct {
    ID          int64   `json:"id"`
    ProductID   *int64  `json:"productID"`
    OrderID     *int64  `json:"orderID"`
    Description string  `json:"description"`
    Quantity    int64   `json:"quantity"`
    Price       float64 `json:"price"`
}

Вопрос : я хочу выполнить функцию Raw() Горма для заполнения объекта models.Order следующим образом:

var orders models.Order
db.Raw(query).Scan(&orders)

Этот Raw() вызов правильно заполняет Order.ID, Order.ShopID и Order.TotalValue, как и ожидалось.Тем не менее, он не заполняет никакую информацию LineItem, хотя предоставленный запрос возвращает необходимые данные.

В документации для Raw() говорится, что он не может быть связан с Preload().

Это достижимо?

...