简单来说,它是一个与SKU相关的库存系统。 SKU是项目的组合,有时是完全相同项目的倍数。
E.G
用餐室的SKU将是4(Item)“chair”和1(Item)“table”。如果我能让GORN认识到它与“椅子”的多个实例相关联,那么我可以继续计算。
这是我尝试过的基本代码
class Item implements Serializable{
String name;
String description;
}
class Sku {
String description;
String skuCode;
Collection items;
static hasMany = [items:Item];
}
//… GENERATE TEST DATA
item = new Item(name:"Table", description:"Oak table");
item.save();
item = new Item(name:"Chair", description:"Oak chair");
item.save();
sku= new Sku(description:"A complete dining room set for 4");
sku.items = [Item.findByName("Table"),Item.findByName("Chair"),
Item.findByName("Chair"),Item.findByName("Chair"),
Item.findByName("Chair")];
sku.save();
这只会将SKU显示为“表格”和“主席”。
我甚至不确定如何在SQL中执行此操作。但我想知道是否有一个可以实现我想要的结构。这似乎是一种干净的编码方式。
最终目标是一个系统,SKU将包含许多不同的项目组合,我希望能够通过输入项目组合来缩小可能的SKU。
E.G如果我搜索Table + 1椅子,我会看到Table& 4把椅子和桌子+ 2把椅子(插入后)等。或桌子+椅子+岛屿+凳子+冰箱
由于
答案 0 :(得分:1)
这需要对文档进行一些深入研究。
Zoidberg是正确的,GORM默认为一套。我曾经使用过Collection,因为我的理解是,这是一个无序列表,可能包含重复项。 The documentation让我尝试列表。列表允许重复。它确实提到了使用列表的性能,所以也请阅读该部分。这是我最初使用Collection的原因,但这似乎不能正常工作。
另一个问题是如何基于部分列表进行查询。 E.G返回所有具有项目"主席"的SKU。出现在某个地方。
This SO answer ended up being my solution to that piece.
所以这是我的示例代码。
class Item implements Serializable{
String name;
String description;
}
class Sku {
String description;
String skuCode;
List items;
static hasMany = [items:Item];
}
//… GENERATE TEST DATA
item = new Item(name:"Table", description:"Oak table");
item.save();
item = new Item(name:"Chair", description:"Oak chair");
item.save();
sku= new Sku(description:"A complete dining room set for 4");
sku.items = [Item.findByName("Table"),Item.findByName("Chair"),
Item.findByName("Chair"),Item.findByName("Chair"),
Item.findByName("Chair")];
sku.save();
//Query test data
Sku.executeQuery("FROM Sku as s WHERE :item in elements(s.items)",
[item: Item.findByName("Chair")])
//returns List<Sku> of any Sku's that contain the item "chair".
//I need to create a version that takes a list, so I can narrow the search.
如果我尝试使用findByItemsInList或任何其他findBy *,那么使用GORM的This issue in Jira与我得到的非常类似。
答案 1 :(得分:0)
您正在添加相同的项目4次(主席)。
sku.items = [Item.findByName("Table"),Item.findByName("Chair"),
Item.findByName("Chair"),Item.findByName("Chair"),
Item.findByName("Chair")];
但默认情况下,GORM会创建一个Set。看到: http://grails.github.io/grails-doc/latest/ref/Domain%20Classes/hasMany.html
并且集合不能包含重复项。如果你想保持计数,你可以添加一个整数来计算你的项目,如果你使用它就增加/减少它。
或者根据需要创建名称为“chair”的任意数量的项目。