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});
Вы сказали, что пытались подтолкнуть работу. Можете ли вы поделиться, как выглядит этот код, если у вас все еще есть проблемы?