【问题标题】:Complicated relationship with 2 Thorough Models与 2 个彻底模型的复杂关系
【发布时间】:2015-09-01 15:28:14
【问题描述】:

我有复杂的关系,包括 2 个彻底的模型。我想创建解决我的目的的自定义方法。我有 MySQL DB 作为数据源。

3 主要模型。

艺术家、专辑、歌曲。

专辑和歌曲通过模型“Tracklist”以 N:N 关系相互关联 2。 Artist 和 Tracklist 通过彻底的模型“TracklistArtist”连接。 我希望通过这种关系获得特定艺术家的专辑和歌曲列表。虽然我用补丁实现了,但它返回重复列表,同时我想要唯一的记录列表。请帮忙。

我只是在这里提到模型关系对象而不是完整的模型对象。

艺术家.json

  {
    "name": "Artist",    
    "relations": {
      "tracklists": {
        "type": "hasMany",
        "model": "Tracklist",
        "foreignKey": "",
        "through": "TracklistArtist"
      }
    }     
  }

专辑.json

{
"name" : "Album",
"relations": {
    "songs": {
      "type": "hasMany",
      "model": "Song",
      "foreignKey": "",
      "through": "Tracklist"
    }
  }
}

歌曲.json

{
"name" : "Song",
  "relations": {
    "albums": {
      "type": "hasMany",
      "model": "Album",
      "foreignKey": "",
      "through": "Tracklist"
    }
  }
}

tracklist.json

{
  "name": "Tracklist",
  "relations": {
    "album": {
      "type": "belongsTo",
      "model": "Album",
      "foreignKey": ""
    },
    "song": {
      "type": "belongsTo",
      "model": "Song",
      "foreignKey": ""
    },
    "artists": {
      "type": "hasMany",
      "model": "Artist",
      "foreignKey": "",
      "through": "TracklistArtist"
    }
  }
}

tracklist-artist.json

{
  "name": "TracklistArtist",
  "relations": {
    "artist": {
      "type": "belongsTo",
      "model": "Artist",
      "foreignKey": ""
    },
    "tracklist": {
      "type": "belongsTo",
      "model": "Tracklist",
      "foreignKey": ""
    }
  } 
}

我已经从 mysql-connector 的 loopback 检查了补丁。 这是链接。 Check Here

 Artist.tracklists({
                id: $stateParams.artistId,
                filter: {
                   groupBY:"albumId",
                   include: {relation: "album", scope: {}},
                }
            }).$promise.then(function (data) {
            });

【问题讨论】:

  • 可以显示您的实际代码/查询吗? stackoverflow.com/help/mcve
  • 你需要我的关系模型的 json 吗??
  • 这可能会有所帮助,以及用于获取特定艺术家的专辑和歌曲列表的代码的相关部分
  • 这里提到了模型关系。因为我需要创建自定义函数所以我没有提到我写的代码。
  • 太棒了 :) 最后一件事,你在数据库部分使用什么模块/框架/orm?

标签: node.js loopbackjs strongloop


【解决方案1】:

您可能需要链接您的包含以获取与以下内容的每个关系:

Artist.find({
  include: {
    relation: 'Tracklist',
    scope: {
      include: {
        relation: ['Album', 'Song']
      }
    }
  },
  where: {id: 12345}
}, function() { ... });

编辑:

Artist.find({
  include: {
    relation: 'Tracklist',
    scope: {
      include: {
        relation: ['Album']
      },
      scope: {
          include: {
            relation: 'Tracklist',
            scope: {
                include: {
                   relation: ['Song']
                }
            }
        }
    }
  },
  where: {id: 12345}
}, function() { ... });

【讨论】:

  • 我试过了,它给了我重复的“专辑”条目。因为我有很多曲目列表。我需要唯一的专辑和歌曲列表。
  • 从你的方案来看,一首歌可以在很多专辑中,所以如果一首歌在很多专辑中引用,你得到专辑的多个条目是很正常的,不是吗?
  • 你提到的当然关系是正确的。艺术家在专辑中演唱各种歌曲。在同一时间,他在不同的专辑中演唱了相同的歌曲。没关系。这就是我想要的逻辑。我需要“专辑和歌曲的唯一单独列表”。我之前写的补丁和你举的例子一样。我试过了,但我希望创建具有自定义功能的唯一列表。
  • 也许加入专辑,然后包含这张专辑的歌曲...一旦有时间,我会编辑我的答案..
  • @Sankalp:你能试试我的第二个例子吗?
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多