原始查询未填充一对多关联

时间:2018-09-14 14:47:28

标签: sqlite gorm go-gorm

我有以下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"`
}

问题:我想执行Gorm的Raw()函数来填充models.Order对象,如下所示:

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

Raw()调用正确地填充了Order.IDOrder.ShopIDOrder.TotalValue。但是,尽管提供的查询返回了必要的数据,但它不会填充任何LineItem信息。

Raw()的文档说它不能与Preload()链接。

这可以实现吗?

0 个答案:

没有答案