- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Sequelize.js 在同一张表上进行双连接。我有一组团队对象和一组游戏对象。一个团队有很多场比赛,所以它在比赛表中会有外键,但每场比赛都有两支球队,所以我需要两次参加比赛。使用 sequelize ORM 执行此操作的最佳方法是什么。
Team = sequelize.define('teams',{
name : Sequelize.STRING,
location : Sequelize.STRING,
});
Game = sequelize.define('games',{
homeTeamId : Sequelize.INTEGER,
awayTeamId : Sequelize.INTEGER,
location : Sequelize.STRING,
});
// Associations
Game.hasOne(Team, {foreignKey : 'homeTeamId'});
.hasOne(Team, {foreignKey : 'awayTeamId'});
Team.hasMany(Game);
谢谢!
最佳答案
这其实是一个有趣的问题。目前 sequelize 不支持此功能,但绝对可行。我在下面概述了两种方法:
var Sequelize = require('./index');
var sequelize = new Sequelize('sequelize_test', 'root', null, {
host: "127.0.0.1",
port: 3306
});
var Team = sequelize.define('teams',{
name : Sequelize.STRING,
location : Sequelize.STRING
}, {
instanceMethods: {
getGamesOne: function () {
var chainer = new Sequelize.Utils.QueryChainer();
chainer.add(this.getHomeGames());
chainer.add(this.getAwayGames());
return new Sequelize.Utils.CustomEventEmitter(function (emitter) {
chainer.run().done(function (err, results) {
var home = results[0],
away = results[1];
if (err) emitter.emit('error', err)
else emitter.emit('success', home.concat(away));
});
}).run();
},
getGamesTwo: function () {
return Game.findAll({ where: ["homeTeamId = ? OR awayTeamId = ?", this.id, this.id ]})
}
}
});
var Game = sequelize.define('games',{
homeTeamId : Sequelize.INTEGER,
awayTeamId : Sequelize.INTEGER,
location : Sequelize.STRING
});
// Associations
Game.belongsTo(Team, {foreignKey : 'homeTeamId'})
.belongsTo(Team, {foreignKey : 'awayTeamId'});
Team.hasMany(Game, { as: 'AwayGames', foreignKey : 'awayTeamId'});
Team.hasMany(Game, { as: 'HomeGames', foreignKey : 'homeTeamId'});
Team.find(1).done(function (err, team) {
team.getGamesOne().done(function(err, games) {
console.log(games);
});
team.getGamesTwo().done(function(err, games) {
console.log(games);
});
})
GetGamesOne 使用 sequelize 的关联分别获取主场比赛和客场比赛,并在返回给您之前加入。GetGamesTwo 手动构建查询,因此您只与数据库对话一次。选择您喜欢的任何一个 - 在其中一个可能不是很清楚发生了什么,但是您正在使用 sequelize 来构建查询,因此即使您稍后更改键的名称它仍然有效。二是非常简短明了,但您必须自己处理查询。
我还将游戏与团队的关系更改为 belongsTo
- 这意味着外键在游戏表中。
享受使用 Sequelize 的乐趣 ;-)
关于node.js - Sequelize.js 使用 hasMany 连接表两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527136/
是否可以在一个集合/json 中获取所有详细信息(用户、帖子、postimages)? 用户->hasmany(帖子) 后->hasmany(后图像) 用户: 身份证 |姓名 邮政: 身份证 |用户
我正在制作一个具有基本消息传递功能的 PHP/MySQL Web 应用程序。两个用户将能够进行包含一系列消息的“对话”。 以下是我设想的模型关系: 用户> 多对多> 对话 对话> 多对多> 用户和一对
我的问题很简单: 我有一个名为users 的表。这些用户可以有很多联系人。这些联系人是其他用户。 所以我有一个名为 userHasContacts 的表,其中包含所有者的 ID (userID) 和联
我有两个 GORM 域类。一个是卡,卡上有很多购买。有什么方法可以搜索大于或等于某些购买的卡。这可能是一个例子 我们有4张牌: Card1:橙、橙、苹果 Card2:苹果、橙子 Card3:橙色,橙色
背景: 我有三个表,即生产、生产线和操作。 生产线引用其先前的生产线,列名为“parent_id”。生产线的深度应等于操作的深度。 以下是他们的关系: Production_lines has man
我有两个表(项目、任务)。 项目表结构如下: id - title - desc - others_column 1 - title - desc - others 2 - title - des
提前感谢您的帮助。 我有两个模型菜单和窗口及其关联 db.menus.hasMany(db.windows); db.windows.belongsTo(db.windows); 我正在尝试使用与此类
使用hasMany有区别吗 static hasMany = [objects:Object] 并添加对象的集合 Set objects 最佳答案 使用之间绝对有区别: static hasMany
我有这四个类: class Animal { static hasMany = [legs: Leg] } class Cat extends Animal { static hasM
当我尝试创建与其父模型关联的子模型时遇到问题。 我有 2 个模型: 机构(有很多地址) 地址(有 1 个机构) 当我单击一个机构并转到 show.blade.php 时,我有一个表单可以为该机构创建地
我正在运行 cakephp 2.0.2,我有以下关系 Category hasMany CategoryWork Work hasMany CategoryWork Categ
是否有一个简单的解决方案可以通过模型上的 hasMany Relation 分离(不删除)所有相关模型? 例如,我有两个表: 学院(ID、名称) 学生(id、姓名、college_id(可为空)) 在
Ember Data 是否类似于 Rails 的 has_many ..., :through =>功能? 最佳答案 它不是。在 1.0 Beta 中添加了一个 Unresolved 问题。里程碑:M
我有用户表,然后是他们的兴趣表。 最好是通过表来管理 hasMany 来管理两者之间的关系,还是最好将 CSV 写入“用户”表中的一列。 到目前为止,我一直在通过表格使用 hasMany,但想知道最好
假设我有两个模型:Park 和 Items。通过 HasMany 关系,每个 Park 都可以有多个 Items。 在 Items 表中有一个 park_id 字段和一个 type 标志:一个 Ite
这是save和 saveMany HasMany 上的方法关系类,但 dissociate(Many) 在哪里?/detach(Many)方法?也没有获得逆关系方法的内置方法,那么从 HasMany
我试图让我在 CakePHP 2.3 中的关联模型正确保存,但我遇到了问题。我正在存储帖子,我想知道这些帖子中有哪些链接。对于这些链接中的每一个,如果可用,我想存储 anchor 文本。我的数据库设置
我有两个类(例如简化): public class Data { public int Id {get; set;} public string Value { get; set; }
有域对象: class Book { List pictures static hasMany = [pictures:Picture] static mappi
我正在尝试实现 HasMany与不可为空的键列的映射。 我的映射如下所示: public void Override(AutoMapping mapping) { mapping.Table(
我是一名优秀的程序员,十分优秀!