Thinky.io 有很多没有保存新的模型实例

Thinky.io hasMany not saving new model instances

本文关键字:模型 保存 实例 io Thinky      更新时间:2023-09-26

我正在努力使用 Thinky.io 加入我的用户和工作模型。

在文档中,这里有一个例子,说明hasMany如何将帖子附加到作者身上。 我希望我们的用户使用相同的设置:理想情况下,每个用户都有一个工作字段,可以保存他们感兴趣的所有工作。 这就是我设置用户-作业关系的方式:User.hasMany(Job, 'jobs', 'id', 'userId')。这是我对添加工作功能所了解的:

module.exports.addJob = function*(next) {
  this.type = 'application/json';
  var user = yield User.get("473ade1a-d2df-4618-9a53-ed68fa98f169").run();
  const joins = yield User.get(user.id).getJoin().run();
  const jobData = yield parse(this);
  const job = new Job(jobData);
  user.jobs = job; 
  var userJoined = yield user.saveAll({jobs: true});

这只是将 user.jobs 设置为用户单击的任何当前作业。 我试着把新工作推到 user.jobs 上,但也没有用。 我可以在控制台中看到信息,但据我所知,这种关系不会保存到数据库中。以前有人处理过这个问题吗? 我是StackOverflow的新手,所以请告诉我如何澄清我的问题。谢谢!

有两种方法可以存储您描述的关系。您可以从User端或Job端解决问题。对我来说,约伯似乎更直观,但我会介绍两者。要记住的关键是关系是虚拟的。数据库中没有存储在User上的作业数组,它只是在运行时为您生成的。

因此,要存储作业,只需执行以下操作:

const job = new Job(jobData);
job.userId = user.id; // set the user id on the relationship
var savedJob = yield job.save();

因此,现在作业保存在数据库中并与用户关联。如果要运行:

var user = yield User.get("473ade1a-d2df-4618-9a53-ed68fa98f169").getJoin().run();

用户将包含一个包含您刚刚运行的一个作业的数组。但也许这不是你想要的。如果您希望能够一次性创建和保存与用户关联的作业,则可以使用saveAll执行示例的路线,但请确保保存的是数组,而不仅仅是作业。

const job = new Job(jobData);
user.jobs = [job]; 
var userJoined = yield user.saveAll({jobs: true});

说你试图推动这项工作。如果您仍然遇到问题,您能分享一下该代码的外观吗?