Thinky.io уже не может сохранять новые экземпляры моделей

Я борюсь за то, чтобы присоединиться к своим пользовательским и рабочим моделям с помощью 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, но это тоже не сработало. Я могу видеть информацию в консоли, но это отношение не сохраняется в базе данных, насколько я могу судить. Кто-нибудь имел дело с этим вопросом раньше? Я новичок в Stackru, поэтому дайте мне знать, как я могу уточнить мой вопрос. Спасибо!

1 ответ

Есть два способа сохранить отношения, которые вы описываете. Вы можете атаковать проблему с 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});

Вы сказали, что пытались подтолкнуть работу. Можете ли вы поделиться, как выглядит этот код, если у вас все еще есть проблемы?

Другие вопросы по тегам