两次参照同一个表创建膝关节移植



试图在postgresql数据库中创建一个表Transaction,该数据库引用Buyers和Sellers.t。两者都是Users表中的对象。

我认为我的迁移工作看起来如下:

exports.up = function(knex, Promise) {
return knex.schema.createTable('likes', t => {
t.increments('id').primary()
t.integer('buyers_id').references('users.id').onDelete('CASCADE')
t.integer('sellers_id').references('users.id').onDelete('CASCADE')
...
t.datetime("created_at");
t.datetime("updated_at");
})
};

接下来,我需要管理模型中的关联。交易属于买方和卖方,它们都是User类的成员。

为了澄清这个问题,我可以创建具有这些属性的模型,但关联似乎不起作用。

这是我的交易模型:

const BaseModel = require("./BaseModel");
// const Password = require('objection-password')();
class Transaction extends BaseModel {
static get tableName() {
return "transactions";
}
static get relationMappings () {
const User = require('./User');
const Item = require('./Item')
return {
buyer: {
relation: BaseModel.BelongsToOneRelation,
modelClass: User,
join: {
from: 'transactions.buyers_id',
to: 'users.id'
}
},
seller: {
relation: BaseModel.BelongsToOneRelation,
modelClass: User,
join: {
from: 'transactions.sellers_id',
to: 'users.id'
}
}, 
books: {
relation: BaseModel.BelongsToOneRelation,
modelClass: Item,
join: {
from: 'transactions.items_id',
to: 'items.id'
}
}
}
}
}
module.exports = Transaction;

以下是我试图急于装载买家的相关路线:

let router = express.Router();
router.get('/', async (req, res) => {
const transactions = await Transaction
.query()
.eager(['buyer', 'items')
res.json(transactions);
});

我已经想通了。上面的代码使用别名buyers和sellers,并将这两种类型的用户与Transactions相关联。

对于任何感兴趣的人。。。使用Node/ExpressJS作为服务器,Postgresql作为数据库,KnexJS/ObjectiveJS来管理模型和查询,整合上述工作解决方案。

以下是为买方和卖方设置列的迁移,这两个列都引用相同的Users表:

exports.up = function(knex, Promise) {
return knex.schema.createTable('likes', t => {
t.increments('id').primary()
t.integer('buyers_id').references('users.id').onDelete('CASCADE')
t.integer('sellers_id').references('users.id').onDelete('CASCADE')
...
t.datetime("created_at");
t.datetime("updated_at");
})
};

HEre是包括关联的交易模型。交易属于物品买家(用户(和卖家(用户(,物品:

const BaseModel = require("./BaseModel");
// const Password = require('objection-password')();
class Transaction extends BaseModel {
static get tableName() {
return "transactions";
}
static get relationMappings () {
const User = require('./User');
const Item = require('./Item')
return {
buyer: {
relation: BaseModel.BelongsToOneRelation,
modelClass: User,
join: {
from: 'transactions.buyers_id',
to: 'users.id'
}
},
seller: {
relation: BaseModel.BelongsToOneRelation,
modelClass: User,
join: {
from: 'transactions.sellers_id',
to: 'users.id'
}
}, 
books: {
relation: BaseModel.BelongsToOneRelation,
modelClass: Item,
join: {
from: 'transactions.items_id',
to: 'items.id'
}
}
}
}
}
module.exports = Transaction;

最后,这里是返回所有交易的快速路线,包括热切加载相关模型:

let router = express.Router();
router.get('/', async (req, res) => {
const transactions = await Transaction
.query()
.eager(['buyer', 'items')
res.json(transactions);
});

最新更新