0

It seems that Order API doesn't work on the raw query in v2, but the sort is ok when using SQL instead. The code below works differently in gorm v1 and v2.

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

log in 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

log in 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

but if use

sql += ` ORDER BY -forder.source_created_time`

it works in 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

Who can help me? Thanks very much.

1 Answers1

0

I think the reason Gorm v2 doesn't work, because they changed it for the purpose.

When we do raw, it means we try to write a complete query by ourself. db.Order("-forder.source_created_time").Raw(sql, params...) is unclear and useless.

Changsong Li
  • 143
  • 6