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