2011-04-06 47 views
0
Class Buyer { 
    String name 
    static constraints = { 
    } 
} 
Class Order { 
    String ref 
    static belongsTo = [buyer:Buyer] 
    static constraints = { 
    buyer(nullable:false) 
    } 
} 

在OrderController.groovy如何通過循環訪問數組或地圖來保存多行數據?

... 
def someAction = { 
    //working 
    def data1 = ["buyer.id": 2, "ref": "xyz"] 
    def ord = new Order(data1); 
    ord.save(); 

    def data2 = ["buyer.id": 2, "ref": "234xyz"] 
    def ord2 = new Order(data2); 
    ord2.save(); 


    //But in a loop - its not working 
    def items = ['abc', 'def', 'ghi', 'jkl'] 
    def data2 = [:] 
    for(e in items) { 
    data2 = ["buyer.id": 2, "ref" : e.value] //keeping buyer id same 
    def ord = new Order(data2); 
    ord.save(); 
    data2 = [:] //just emptying it? 
    } 
} 

正如你會發現在「工作」上面,如果我能夠通過複製粘貼和definging新地圖,但如果我通過陣列嘗試循環保存多個行,它不起作用。任何想法如何通過循環訪問數組或地圖來保存數據?

有任何疑問,請與我們知道 感謝

回答

1

首先,我不知道["buyer.id": 2, "ref" : e.value],我認爲它應該是[buyer: Buyer.get(2), ref : e.value]

其次,我會推薦使用cascading save來完成任務。你可以嘗試這樣的事情(你需要定義爲買方買方訂單關係的static hasMany = [orders: Order]關係。

Buyer b = new Buyer(name: "foo") 
for(e in items) { 
    def ord = new Order(ref: e.value); 
    b.addToOrders(ord) 
    } 

b.save(flush:true) 
+0

謝謝你的答案。我曾嘗試.get()但不知何故,它沒有工作,我需要嘗試你的解決方案,我會讓你知道它是怎麼回事 – TigerTiger 2011-04-06 09:01:33

+0

爲什麼您使用買方b =新買方(名稱:「foo」)而不是def b =新買方(名稱:「foo」)? – TigerTiger 2011-04-06 09:14:18

+0

@Wbdvlpr:def b = new Buyer is ok。我不明白爲什麼Buyer.get(buyerId)失敗,它是否仍提供相同的結果或未能獲得買方? – 2011-04-06 09:53:51

0

你應該只能夠做到:

def someAction = { 
    def items = ['abc', 'def', 'ghi', 'jkl'] 
    items.each { item -> 
    def ord = new Order([ 'buyer.id':2, ref:item ]) 
    ord.save() 
    } 
} 

什麼錯誤(如果有的話),你好嗎?

另外,你爲什麼要做e.value?這會給你一個字符數組而不是字符串數組(這是你的第一個工作示例使用)

+0

謝謝您的回答@tim,是不是該解決方案有點類似礦用烏爾「每個」除? – TigerTiger 2011-04-06 08:57:39

+0

是的,並沒有使用'e.value'和省略不必要的分號和不清除地圖(這是沒有理由要做的) – 2011-04-06 08:59:34

+0

嗯..即時通訊非常新的時髦,因爲我被卡住了,我嘗試了各種選擇像我一樣清空地圖等,以得到它排序。我需要嘗試,看看它是怎麼回事?我怎麼得到錯誤信息是.save(failOnError:true)?? – TigerTiger 2011-04-06 09:04:36