2016-03-23 8 views
2

Ich habe Probleme damit, meine Benutzer- und Jobmodelle mit Thinky.io zu verbinden.Thinky.io hatViele neue Modellinstanzen nicht gespeichert

In der Dokumentation gibt es ein Beispiel here wie hasMany funktioniert, um Beiträge an einen Autor anhängen. Ich hätte gerne das gleiche Setup für unsere Benutzer: Jeder Benutzer hätte idealerweise ein Jobfeld, das alle Jobs speichert, an denen er interessiert ist. So habe ich die User-Job-Beziehung eingerichtet: User.hasMany (Job, 'jobs', 'id', 'userId'). Dies ist so weit, wie ich mit meiner Add Job-Funktion bekommen haben:

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}); 

Das gerade ist user.jobs, was auch immer aktuellen Job der Benutzer angeklickt Einstellung. Ich habe versucht, den neuen Job auf user.jobs zu schieben, aber das hat auch nicht funktioniert. Ich kann die Informationen in der Konsole sehen, aber diese Beziehung wird nicht in der Datenbank gespeichert, soweit ich das beurteilen kann. Hat sich jemand schon einmal mit diesem Thema beschäftigt? Ich bin neu in StackOverflow, also lassen Sie mich wissen, wie ich meine Frage klären kann. Vielen Dank!

Antwort

0

Es gibt zwei Möglichkeiten, die von Ihnen beschriebene Beziehung zu speichern. Sie können das Problem von der User Seite oder der Job Seite angreifen. Job erscheint mir intuitiver, aber ich werde beide durchgehen. Der Schlüssel zum Erinnern ist, dass Beziehungen virtuell sind. Es gibt kein Array von Jobs unter User, das in der Datenbank gespeichert ist. Es wird nur zur Laufzeit für Sie erstellt.

Also, die Arbeit zu speichern, einfach tun:

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

So, jetzt Job in der Datenbank und dem Benutzer zugeordnet gespeichert. Wenn Sie ausführen möchten:

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

Benutzer würde ein Array mit dem einen Job enthalten, den Sie gerade ausgeführt haben. Aber vielleicht willst du das nicht. Wenn Sie den mit dem Benutzer verknüpften Job auf einmal erstellen und speichern möchten, können Sie die Route des Beispiels verwenden, indem Sie saveAll verwenden, aber stellen Sie sicher, dass Sie ein Array speichern, nicht nur den Job.

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

Sie sagten, Sie haben versucht, den Job zu schieben. Können Sie mitteilen, wie der Code aussieht, wenn Sie immer noch Probleme haben?