在 GORM v2 中使用原始查询时,顺序不起作用



Order API似乎不适用于v2中的原始查询,但使用SQL时排序是可以的。下面的代码在gorm v1和v2中的工作方式不同。

sql := getSql()
params := getParams()
rows, err := db.Order("-forder.source_created_time").Raw(sql, params...)

登录v2:

SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_orders_order o ON o.id=forder.source_order_id
WHERE forder.source = 'online'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0 
UNION ALL
SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_cash_dinningorder do ON do.id=forder.source_order_id
WHERE forder.source = 'dinning'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0

登录v1:

SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_orders_order o ON o.id=forder.source_order_id
WHERE forder.source = 'online'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0 
UNION ALL
SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_cash_dinningorder do ON do.id=forder.source_order_id
WHERE forder.source = 'dinning'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0 
ORDER BY -source_created_time

但是如果使用

sql += ` ORDER BY -forder.source_created_time`

它在v2:中工作

SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_orders_order o ON o.id=forder.source_order_id
WHERE forder.source = 'online'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0 
UNION ALL
SELECT forder.*
FROM sparrow_fullorder_fullorder forder
JOIN sparrow_cash_dinningorder do ON do.id=forder.source_order_id
WHERE forder.source = 'dinning'  AND 
forder.user_id = 'c88685f78cee4631b0b879583a5ad1f6' AND 
forder.deleted = 0
ORDER BY -forder.source_created_time

谁能帮我?非常感谢。

我认为Gorm v2不起作用的原因是他们为了这个目的而更改了它。

当我们进行raw时,这意味着我们试图自己编写一个完整的查询。CCD_ 1是不清楚和无用的。

最新更新