データベース操作用のアプリケーションで使用Bookshelf
していますNodeJs
実行するときに必要です:
User = bookshelf.Model.extend({
tableName: 'users'
});
new User({
firstName: "John",
lastName: "Paul"
}).save();
「first_name」列と「last_name」列に値を保存する必要があります
これを定義するにはどうすればよいですか?
データベース操作用のアプリケーションで使用Bookshelf
していますNodeJs
実行するときに必要です:
User = bookshelf.Model.extend({
tableName: 'users'
});
new User({
firstName: "John",
lastName: "Paul"
}).save();
「first_name」列と「last_name」列に値を保存する必要があります
これを定義するにはどうすればよいですか?
どうやらこれを行うための組み込みメソッドはありません。しかし、私は #bookshelf irc でこれを尋ねたところ、誰かが教えてくれました :)
var STRING_CAMELIZE_REGEXP = (/(\-|_|\.|\s)+(.)?/g);
var STRING_UNDERSCORE_REGEXP_1 = (/([a-z\d])([A-Z]+)/g);
var STRING_UNDERSCORE_REGEXP_2 = (/\-|\s+/g);
function camelize(str) {
return str.replace(STRING_CAMELIZE_REGEXP, function(match, separator, chr) {
return chr ? chr.toUpperCase() : '';
}).replace(/^([A-Z])/, function(match, separator, chr) {
return match.toLowerCase();
});
}
function underscore(str) {
return str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').
replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase();
}
var _ = require('lodash');
var Podcast = bookshelf.Model.extend({
parse: function(attrs) {
return _.reduce(attrs, function(memo, val, key) {
memo[camelize(key)] = val;
return memo;
}, {});
},
format: function(attrs) {
return _.reduce(attrs, function(memo, val, key) {
memo[underscore(key)] = val;
return memo;
}, {});
}
});
var p = new Podcast();
p.set('lastUpdated', new Date());
詳しく説明すると、これにより camelCase が snake_case に変わります。