該
這是我迄今為止最好的嘗試。以下代碼創建表列 OK,但沒有按預期創建行。該create方法可以是完全錯誤的; 例如,應該有設定的方法predicate,但我不知道把它放在哪里:
const { Sequelize } = require("sequelize");
(async () => {
try {
const db = await new Sequelize({
dialect: "sqlite",
storage: "./db/db.db",
});
const Node = await db.define("node", {
name: {
type: Sequelize.STRING,
},
});
const Edge = await db.define("edge", {
subject_node_id: {
type: Sequelize.INTEGER,
},
predicate: {
type: Sequelize.STRING,
},
direct_object_node_id: {
type: Sequelize.INTEGER,
},
});
await Node.sync({ force: true });
await Edge.sync({ force: true });
await Node.belongsToMany(Node, {
through: "Edge",
as: "subjects",
foreignKey: "id",
otherKey: "subject_node_id"
});
await Node.belongsToMany(Node, {
through: "Edge",
as: "direct_objects",
foreignKey: "id",
otherKey: "direct_object_node_id"
});
await Node.create(
{
name: "Dave",
// Loves ??
subjects: [{
name: "Sarah"
}]
},
);
console.log("created");
} catch (error) {
console.error(error);
}
})();
我確實找到了這個 SO thread,但接受的答案并沒有完全到達那里。任何額外的想法?謝謝。
uj5u.com熱心網友回復:
我想到了:
const { Sequelize, DataTypes } = require("sequelize");
(async () => {
try {
const db = await new Sequelize({
dialect: "sqlite",
storage: "./db/db.db",
});
const Node = db.define("node", {
name: DataTypes.STRING,
});
const Edge = db.define("edge", {
subjectId: DataTypes.INTEGER,
predicate: DataTypes.STRING,
dobjectId: DataTypes.INTEGER,
});
await Node.belongsToMany(Node, {
through: Edge,
as: "subjects",
foreignKey: "dobjectId",
});
await Node.belongsToMany(Node, {
through: Edge,
as: "dobjects",
foreignKey: "subjectId",
});
await db.sync({force: true});
const dave = await Node.create({ name: "Dave" });
const sarah = await Node.create({ name: "Sarah" });
await dave.addDobject(sarah, { through: {
predicate: "Loves"
}});
await sarah.addDobject(dave, { through: {
predicate: "Loves"
}});
const result = await Node.findOne({
where: { name: "sarah" },
include: ["subjects", "dobjects"],
});
console.log(result);
console.log("created");
} catch (error) {
console.error(error);
}
})();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/340589.html
