0

我试图弄清楚spine.js是否支持模型之间的多对多关系,或者我是否通过将相关模型ID存储在双方的数组中来更好地实现自己的东西。

文档中的示例显示了非常简单的示例,仅具有一对多的情况,即使在那里我也没有变得更聪明,对我来说,脊椎关系的实现看起来真的很有限。我仍然不明白如何将现有实例添加到关系而不是创建新实例。

我需要做的最简单的例子是带有标签的典型博客。每个帖子可以有很多标签,每个标签可以有很多相关的帖子。当我创建帖子时,我想向帖子添加新的和/或现有的标签。我需要能够获取与特定标签相关的所有帖子。

有没有人能把我带到正确的道路上?

4

2 回答 2

1

恐怕我无法帮助您解决多对多关系,因为我目前正在尝试解决相同的问题,但就现有实例的一对多而言,您可以添加一个外键作为 hasMany、hasOne 和 belongsTo 函数中的可选参数(默认为 '{className}_id')。这些示例有点误导,因为它们暗示您必须显式地将项目添加到集合中,但实际上,关系是由外键定义的

class Parent extends Spine.Model
  @configure 'Parent', 'id'
  @hasMany 'children', 'Child', 'parent_id'

class Child extends Spine.Model
  @configure 'Child', 'id', 'parent_id'
  @belongsTo 'parent', 'Parent', 'parent_id'

parent = new Parent 
child1 = new Child(parent_id: parent.id)
child2 = new Child(parent_id: parent.id)

@log parent.children().all() #[child1, child2]
@log child1.parent() is child2.parent() #true

据我所见,new Child(parent_id: parent.id)并且parent.children().create()相当于同一件事,但我对 SpineJS 很陌生,所以我很容易出错......

我认为已经有一些关于多对多关系的拉取请求,但 Alex MacCaw 迄今为止拒绝了它们(我相信他一般不喜欢关系的概念,并且正在考虑将它们从脊椎中删除)

于 2012-08-15T10:51:31.317 回答
0

将您的 xxx_yyy_ship 模型镜像到 Spine.Model

xxx.coffee include hasMany xxx_yyy_ship
yyy.coffee include hasMany xxx_yyy_ship

xxx::all_yyy -> ship.yyy for ship in @xxx_yyy_ship()
yyy::all_xxx -> ship.xxx for ship in @xxx_yyy_ship()

使用 hasMany 和一个中间船模型来模拟多对多关系。

于 2012-09-04T06:50:16.313 回答