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?
}
}
正如您在上面的“工作”中所注意到的,如果我能够通过复制粘贴和定义新地图来保存多行但是如果我尝试循环遍历数组,则它不起作用。任何想法如何通过循环数组或地图来保存数据?
如有任何问题,请告知 感谢
答案 0 :(得分:2)
首先,我不确定["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)
答案 1 :(得分: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
?这将为您提供一个Character而不是String的数组(这是您的第一个工作示例正在使用的)