bookshelf.js не загружает отношение

Я новичок в bookshelfjs, и я хочу получить данные из другой таблицы, используя идентификатор из другой таблицы. Я использую этот пример данных:

/* User's Table */
----------------+-------------------+----------
   lastname     |    firstname      |   id  
----------------+-------------------+---------
Dela Cruz          Juan                1
Pendoku            Pedro               2

/* Logs's Table */
----------------+--------------+----------
     userid     |    time      |   id  
----------------+--------------+---------
  1                 8:00           1
  2                12:00           2
  1                 9:00           3

Вопрос: как я могу запросить журналы конкретного пользователя через bookshelf.js?

поэтому результат должен быть таким:

----------------+--------------+----------
     lastname   |    time      |   id  
----------------+--------------+---------
 Dela Cruz          8:00           1
 Dela Cruz          9:00           3

Мой запрос:

new User({'lastname': 'Dela Cruz'})
  .logs()
  .fetch()
  .then(function(timelog) {
    console.log(timelog.toJSON());
}); 

Мои модели

var User, Log;

User = bookshelf.Model.extend({
  tableName:'user',
  logs: function() {
     return this.hasMany(Log, 'userid');
  }
});

Log = bookshelf.Model.extend({
  tableName:'log',
  user: function(){
    return this.belongsTo(User, 'userid');
  }
});

Ошибка журнала:

{ __cid: '__cid1',
  method: 'select',
  options: undefined,
  bindings: [undefined],
  sql: 'select log.* from log where log.userid = ?'
}

2 ответа

Измените модель пользователя на это:

User = bookshelf.Model.extend({
  tableName:'user',
  logs: function() {
     return this.hasMany(Log);
  }
});

И попробуйте это

new User({'lastname': 'Dela Cruz'})
  .fetch({withRelated:['logs']})
  .then(function(timelog) {
    console.log(timelog.toJSON());
}); 

Попробуйте добавить {idAttribute: 'UserId'} к вашей пользовательской модели, которая, как мне показалось, была чувствительна к регистру FieldNames, поэтому в результате использования 'userid' не было возвращено данных, а 'UserId'. Поэтому убедитесь, что он соответствует полю в вашей базе данных

Так что поменяйте модель на

User = bookshelf.Model.extend({
  tableName:'user',
  idAttribute: 'userid',
  logs: function() {
     return this.hasMany(Log);
  }
});

И попробуйте запрос, как показано в ответе uglycode

Другие вопросы по тегам