dresende / node-orm2

Object Relational Mapping
http://github.com/dresende/node-orm2
MIT License
3.07k stars 379 forks source link

Association Returning Parent #576

Closed ghost closed 9 years ago

ghost commented 9 years ago

I'm not sure if this is a bug, or if it's somehow my fault, but an association is returning it's parent object. Here's the relevant code (sorry it's in coffeescript):

Job = db.define 'jobs', {
    id: type: 'serial', key: true
    name: type: 'text', required: true, size: 128
    created: type: 'date', time: true
    start: type: 'date', time: true
    complete: type: 'date', time: true
    paid: type: 'date', time: true
    expiry: type: 'date', time: true
    viewed: type: 'boolean'
  }, {
    hooks:
      beforeValidation: -> this.created = now()
    validations:
      name: orm.enforce.ranges.length 0, 128, 'Job name is too long'
  }

  Job.hasOne 'message', db.models.message, {autoFetch: true}
  Job.hasOne 'client', db.models.user, {reverse: 'sentJobs'}
  Job.hasOne 'contractor', db.models.user, {reverse: 'receivedJobs'}
  Job.sync()

Here's what I get when I output a find result to console:

[ { id: [Getter/Setter],
    name: [Getter/Setter],
    created: [Getter/Setter],
    start: [Getter/Setter],
    complete: [Getter/Setter],
    paid: [Getter/Setter],
    expiry: [Getter/Setter],
    viewed: [Getter/Setter],
    message_id: [Getter/Setter],
    client_id: [Getter/Setter],
    contractor_id: [Getter/Setter],
    message: 
     { id: [Getter/Setter],
       name: [Getter/Setter],
       created: [Getter/Setter],
       start: [Getter/Setter],
       complete: [Getter/Setter],
       paid: [Getter/Setter],
       expiry: [Getter/Setter],
       viewed: [Getter/Setter],
       message_id: [Getter/Setter],
       client_id: [Getter/Setter],
       contractor_id: [Getter/Setter] } } ]

As you can see, the message object is the same as the parent for some reason. Here's the actual message model for reference:

Message = db.define 'messages', {
    id: type: 'serial', key: true
    message: type: 'text', big: true
    created: type: 'date', time: true
  }, {
    hooks:
      beforeValidation: -> this.created = now()
  }

  Message.hasOne 'owner', db.models.user
  Message.sync()
  Message
ghost commented 9 years ago

Turns out this was my fault. There was a problem with db.models. Sorry for the trouble.