Код
Предпочтительный способ
this.related('title').save({value: input});
Но так как эта строка вырезана и вставлена из середины некоторого абстрактного класса, ниже приведен более свободный способ прямого воспроизведения того же сообщения об ошибке. .
Альтернативная реализация
let title = await book.related('title');
title.set({value: inputs.title});
title.save().then( (model) => {} );
Сообщение об ошибке
Unhandled rejection Error: Undefined binding(s) detected when compiling SELECT. Undefined column(s): [titles.titleable_id] query: select distinct `titles`.* from `titles` where `titles`.`id` = ? and `titles`.`titleable_id` = ? and `titles`.`titleable_type` = ? limit ?
at QueryCompiler_MySQL.toSQL (/Users/captainhusaynpinguin/Documents/sails/ilog/node_modules/knex/lib/query/compiler.js:101:13)
at Builder.toSQL (/Users/captainhusaynpinguin/Documents/sails/ilog/node_modules/knex/lib/query/builder.js:77:44)
at /Users/captainhusaynpinguin/Documents/sails/ilog/node_modules/knex/lib/runner.js:31:36
at /Users/captainhusaynpinguin/Documents/sails/ilog/node_modules/knex/lib/runner.js:260:24
Примечание: хотя вышеуказанная ошибка печатается в терминале из-за способа JavaScript выполняя вложенные функции, программа фактически обновляет строку в базе данных и продолжает отображение представления ответа. Однако эта ошибка может привести к разрыву программы в середине (отображение 500), когда та же функциональность сочетается с await
...
Фон
Книжная полка. js is подключен к Sails- JS через пользовательский крюк:
модель: название
let Post = require('../Post')
var Title = sails.hooks.orm.bookshelf.Model.extend({
tableName: 'titles',
hasTimestamps: true,
titleable() {
return this.morphTo('titleable', 'Post')
}
});
module.exports = sails.hooks.orm.bookshelf.model('Title', Title);
модель: сообщение
let Post = sails.hooks.orm.bookshelf.Model.extend(
tableName: 'posts',
title() {
return this.morphOne('Title', 'titleable', ['titleable_type', 'titleable_id'])
}
);
module.exports = Post;
- MacOS Sierra
- mysql Ver 8.0.18 для osx10.12 на x86_64 (Homebrew)
- узел v12.13.1
- Sails v1.2.4
- bookshelf@1.1.1
- knex@0.21.0
Другие оставшиеся без ответа вопросы, связанные с аналогичной проблемой / ошибкой
Ошибка: при компиляции SELECT с Книжной полки обнаружены неопределенные привязки. 1065 * save ()
Возможное объяснение
Как отмечается в документации API, метод save()
выполняет автоматическое c извлечение модели, к которому я думаю Книжная полка не может передать начальные данные (titleable_type
и titleable_id
) в knex .
PS. Я только начинаю использовать JS для бэкэнда, поэтому заранее прошу прощения, если ошибка вызвана ошибками / недопониманием основами c базовых концепций.