1 回答

TA貢獻1874條經驗 獲得超12個贊
在閱讀了文檔和一堆 StackOverflow 答案后,對我來說沒什么用。文檔和/或 StackOverflow 建議我在遷移模型時添加約束,或/并將約束添加到 structs gorm:"constraint:OnDelete:CASCADE;"
,我也嘗試db.Select("cars").Delete(&customers)
過但沒有成功。這就是我的做法,不確定這是否是最佳做法,但它會從數據庫中刪除其相關記錄。我像這樣更新了 deleteCustomer 和 deleteCar 端點:
//delete customer
func deleteCustomer(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
setupResponse(&w, r)
if (*r).Method == "OPTIONS" {
return
}
var customer Customer
var cars []Car
db.First(&customer, params["id"])
db.Model(&customer).Related(&cars)
deleteServicesSqlStatement := `
DELETE FROM services
WHERE car_id = $1;`
for i, car := range cars {
fmt.Println(i, car.ID)
err := db.Exec(deleteServicesSqlStatement, car.ID).Error
if err != nil {
fmt.Println(err)
}
}
DeleteCarsSqlStatement := `
DELETE FROM cars
WHERE customer_id = $1;`
err := db.Exec(DeleteCarsSqlStatement, params["id"]).Error
if err != nil {
fmt.Println(err)
}
db.Debug().Unscoped().Delete(&customer)
json.NewEncoder(w).Encode(&customer)
}
//delete car
func deleteCar(w http.ResponseWriter, r *http.Request) {
//handle CORS
setupResponse(&w, r)
if (*r).Method == "OPTIONS" {
return
}
params := mux.Vars(r)
var car Car
db.First(&car, params["id"])
sqlStatement := `
DELETE FROM services
WHERE car_id = $1;`
err := db.Exec(sqlStatement, params["id"]).Error
if err != nil {
fmt.Println(err)
}
db.Debug().Unscoped().Delete(&car)
json.NewEncoder(w).Encode(&car)
}
- 1 回答
- 0 關注
- 115 瀏覽
添加回答
舉報