node-persist icon indicating copy to clipboard operation
node-persist copied to clipboard

Bugs in custom primary key handling

Open anongit opened this issue 11 years ago • 0 comments

User = persist.define("User", {
  'email': {'type': 'string', 'primaryKey': true},
  'name': 'string',
})
.on("beforeSave", function(self) {
  // have to save and restore email, because 
  // last_id is assigned to it after insert
  self._email = self.email;
})
.on("afterSave", function(self) {
  self.email = self._email;
  delete self._email;
});

var Comment = persist.define("Comment", {
  'text': 'string',
})
.hasOne(User, { 'foreignKey': 'user_email' });

The hack with save and restore email is for this line: https://github.com/nearinfinity/node-persist/blob/master/lib/connection.js#L115

When I try to select user.comments I get nothing, query is:

select t0."text" AS c0, t0."id" AS c1, t0."user_email" AS c2 
FROM Comments AS t0 
WHERE user_id = ? LIMIT 1 
[ '[email protected]' ]

As you can see it uses user_id instead of user_email. I get the results if I delete this line: https://github.com/nearinfinity/node-persist/blob/master/lib/model.js#L334

What reasons do you have to delete foreignKey when you make reversed association in parent model? If child.key references parent.id, then parent.id must reference child.key, not child.id.

anongit avatar Apr 13 '13 02:04 anongit