创建两次引用同一表的Knex迁移

尝试在引用买方和卖方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");
  })
};

接下来,我需要管理模型中的关联,例如,交易属于买方和卖方,它们都是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,join: {
          from: 'transactions.sellers_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);
});

我已经弄清楚了。上面的代码有效,使用别名买卖双方并将这两种类型的用户与交易相关联。

baogang888999 回答:创建两次引用同一表的Knex迁移

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

以下是迁移过程,该迁移过程为买卖双方设置了引用相同的“用户”表的列:

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");
  })
};

这里是包含关联的交易模型。交易属于商品买方(用户)和卖方(用户)以及商品:

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,join: {
          from: 'transactions.sellers_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);
});
本文链接:https://www.f2er.com/3124406.html

大家都在问