public static function fetchRefundOrderProducts(int $order_id) { $tmp_pro = self::find()->select('img_url,product_name,buy_number as refund_number,properties,is_gift,product_id,price,parts_ids')->where(['order_id' => $order_id])->indexBy('product_id')->asArray()->all(); foreach ($tmp_pro as $ktp => &$vtp) { $vtp['url_code'] = $service->idToCode($vtp['product_id']); $tmp_pro[$ktp]['gifts'] = []; if ($vtp['is_gift']) { $tmp_pro[$vtp['is_gift']]['gifts'][] = $vtp; unset($tmp_pro[$ktp]); } } $result = array_values($tmp_pro); return $result; } 用go改写
时间: 2024-03-19 10:45:49 浏览: 104
请注意,由于Go语言没有类似于PHP的Active Record模式,因此需要使用其他方式进行数据库查询和操作。下面是一个参考的Go语言实现,使用了GORM库进行数据库查询和ORM映射:
```
import (
"github.com/jinzhu/gorm"
)
type Product struct {
ImgUrl string `gorm:"column:img_url"`
ProductName string `gorm:"column:product_name"`
RefundNumber int `gorm:"column:buy_number"`
Properties string `gorm:"column:properties"`
IsGift bool `gorm:"column:is_gift"`
ProductId int `gorm:"column:product_id;primary_key"`
Price float64 `gorm:"column:price"`
PartsIds string `gorm:"column:parts_ids"`
}
func FetchRefundOrderProducts(orderId int) ([]Product, error) {
db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil {
return nil, err
}
defer db.Close()
var products []Product
db.Where("order_id = ?", orderId).Find(&products)
service := NewService() // 假设已经实现了idToCode()方法
for i, p := range products {
products[i].UrlCode = service.IdToCode(p.ProductId)
}
result := []Product{}
for _, p := range products {
if p.IsGift {
for i, q := range products {
if q.ProductId == p.IsGift {
products[i].Gifts = append(products[i].Gifts, p)
break
}
}
} else {
result = append(result, p)
}
}
return result, nil
}
```
说明:
1. 定义了Product结构体,包含了查询结果中需要的字段。注意,结构体的字段名需要与数据库表中的列名相对应。
2. 定义了FetchRefundOrderProducts()函数,接受一个订单ID作为参数,返回查询结果数组和可能的错误。
3. 在函数中,首先使用gorm.Open()方法连接数据库,并通过db.Where().Find()方法查询指定订单的退款商品信息。
4. 遍历查询结果,对于每个商品信息:
- 通过idToCode()方法将商品ID转换为URL编码。
- 如果商品是赠品,则将其添加到对应主商品的gifts属性中。
5. 根据查询结果中是否是赠品,将商品信息分别添加到最终结果集中或从结果集中删除。
6. 返回最终结果集和可能的错误。
请根据实际需要进行调整和修改。
阅读全文