2016-03-23 8 views
2

Я борюсь с присоединением к моделям пользователей и работы с использованием Thinky.io.Thinky.io hasMany не сохраняет новые экземпляры модели

В документах есть пример here о том, как hasMany выполняет прикрепление сообщений по автору. Мне бы хотелось, чтобы у наших пользователей была одна и та же настройка: у каждого пользователя в идеале было бы поле задания, в котором были сохранены все рабочие места, которые им интересны. Именно так я установил отношения User-Job: 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, поэтому дайте мне знать, как я могу уточнить свой вопрос. Спасибо!

ответ

0

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

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