【问题标题】:Persistence.js adding many-to-many in both directionsPersistence.js 在两个方向上添加多对多
【发布时间】:2013-02-17 15:33:46
【问题描述】:

使用persistence.js 我有两个实体(Foo,Bar)形成多对多关系(N:M)。到目前为止,我只能让它添加许多“在一个方向上”,即 Foo 的一个实例可以添加许多 Bar,但是在这种关系中使用的任何 Bar 实例都不能反过来有许多 Foo。但是任何新的 Bar 实例都可以再次拥有许多 Foo。是否有可能,如果可以,如何“双向”添加许多实体?还是我必须像在 RDB 中那样使用联结表 (N:M => 1:N M:1 )?

var foo0, foo1, foo2, bar0, bar1, bar2 Foo = persistence.define('Foo', { val: 'TEXT' } ) Bar = persistence.define('Bar', { val: 'TEXT' } ) Foo.hasMany('bars', Bar, 'foo') Bar.hasMany('foos', Foo, 'bar') 持久性.store.memory.config(持久性); 持久性.schemaSync(); foo0 = new Foo( { val : 'foo0' } ) foo1 = new Foo( { val : 'foo1' } ) foo2 = new Foo( { val : 'foo2' } ) bar0 = new Bar( { val : 'bar0' } ) bar1 = new Bar({ val : 'bar1' } ) bar2 = new Bar( { val : 'bar2' } ) foo1.bars.add(bar0) foo2.bars.add( bar0 ) // 注意:已经用上面的语句添加到 DB => 什么都不做 foo2.bars.add(bar1) bar1.foos.add( foo0 ) bar2.foos.add( foo0 ) // 注意:已经用上面的语句添加到 DB => 什么都不做 bar2.foos.add( foo1 ) 持久性.flush(函数(){ Foo.all().each( 函数 ( foo ) { foo.bars.list(函数(酒吧){ console.log("Foo" + foo.val +":") _.each(bars, function (bar) { console.log(bar.val) }) }) }) Bar.all().each( 函数 ( bar ) { bar.foos.list( 函数 ( foos ) { console.log("Bar" + bar.val +":") _.each( foos, function ( foo ) { console.log( foo.val ) } ) }) }) Bar.all().list( 函数 ( 酒吧 ) { foo0.bars = 酒吧 } ) // => “未捕获的错误:尚不支持” })

【问题讨论】:

    标签: javascript


    【解决方案1】:

    1。 inverseProperties 必须相同

    Foo.hasMany('bars', Bar, 'foos') Bar.hasMany('foos', Foo, 'bars')

    2。 每当一个实体添加另一个实体时,两者都插入到 数据库并自动交叉引用

    foo0 = new Foo { val: 'foo0: 根本没有使用' } foo1 = new Foo { val: 'foo1: has bar0, not added by others' } foo2 = new Foo { val: 'foo2: cross-add bar1' } foo3 = new Foo { val: 'foo3: 再次添加 bar1' } foo4 = new Foo { val: 'foo4: 添加多个' } foo5 = new Foo { val: 'foo5: 仅由 bar4 添加' } bar0 = 新酒吧 { val: 'bar0' } bar1 = new Bar { val: 'bar1: 交叉添加 foo2,在 foo3 中再次使用' } bar2 = new Bar { val: 'bar2: 由 foo4 #1 添加' } bar3 = new Bar { val: 'bar3: 由 foo4 #2 添加' } bar4 = new Bar { val: 'bar4: added by foo4 #3, has foo5'} foo1.bars.add bar0 foo2.bars.add bar1 foo3.bars.add bar1 foo4.bars.add bar2 foo4.bars.add bar3 foo4.bars.add bar4 bar1.foos.add foo2 bar4.foos.add foo5

    3。 但是在使用 addAll() 时情况并非如此,这需要通过持久性本身或由另一个实体添加

    foo4b = new Foo { val : 'foo4b: 从 foo4 复制条形图' } foo4.bars.list ( 酒吧 ) -> foo4b.bars.add所有酒吧 persistence.add foo4b # 任选其一, # bar4.foos.add foo4b # 都可以

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 2016-09-11
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多