【发布时间】:2020-03-07 02:53:09
【问题描述】:
尝试在引用买家和卖家 s.t. 的 postgresql 数据库中创建表 Transaction。两者都是用户表中的对象。
我认为我的迁移工作看起来如下所示:
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");
})
};
接下来,我需要管理模型中的关联,s.t Transaction 属于买方和卖方,它们都是 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);
});
我已经想通了。上面的代码工作,使用别名买家和卖家,并将这两种类型的用户与交易相关联。
【问题讨论】:
-
澄清问题:您的意思是“我如何编写使用此表的查询”?
-
啊,感谢您添加
objection.js标签和附加代码。看起来你解决了自己的问题,很好!您可能希望将您的代码添加为接受的答案,以防其他人也在为类似的事情而苦苦挣扎:)
标签: postgresql foreign-keys database-migration knex.js objection.js