2 回答

TA贡献1893条经验 获得超10个赞
Scan将值放入指向已为其指定的变量的指针中 (),并返回数据库事务对象。您正在调用该事务对象 ,但事实并非如此。项目(即购物车中的内容)位于 中,而不是 返回的内容中。via &citemsc *CartScan
您的方法通过填充它进行修改,它不必返回任何内容,除非您要返回可能返回的错误。cScan
而不是这个...
items, err := cart.GetAllItemsInCart(server.DB, id)
// ...
responses.JSON(w, http.StatusOK, items)
你应该这样做:
err := cart.GetAllItemsInCart(server.DB, id)
// ...
responses.JSON(w, http.StatusOK, cart)

TA贡献1848条经验 获得超2个赞
您需要修复以下几点:
您将需要使用而不是因为已经是一个指针。
Scan(c)
Scan(&c)
c
您应该始终检查错误。在您的方法中,您不会通过或检查错误。从技术上讲,您确实传递了它(在对象内部),但您不会在任何地方检查它。
GetAllItemsInCart
items
无需将指针向上传递。
*gorm.DB
如果你想以你已经开始的方式保留代码的结构,它可能看起来像这样:
func (c *Cart) GetAllItemsInCart(db *gorm.DB, customer_id string) error {
return db.Raw("SELECT id, product_id FROM carts WHERE customer_id = ?", customer_id).Scan(c).Error
}
// controller
func (server *Server) GetAllCartItems(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
id := vars["id"]
cart := models.Cart{}
err := cart.GetAllItemsInCart(server.DB, id)
if err != nil {
responses.ERROR(w, http.StatusInternalServerError, err)
return
}
responses.JSON(w, http.StatusOK, cart)
}
- 2 回答
- 0 关注
- 211 浏览
添加回答
举报