我在knex模式中定义浮点精度时遇到问题,我希望它是一个浮点数(10,6)以存储纬度/经度位置。以下是我试图宣布它的方式:
lat: {type: 'float(10,6)', nullable: false},
由于(10,6),它在迁移时失败,所以如何正确地执行此操作?
答案 0 :(得分:2)
我不知道这种JSON方法,因为我只使用Schema Builder。
看起来像{geostuff
表id
,lat
和lng
列:
var knex = require('knex')({client:'sqlite3',connection:{filename: 'sample.sqlite3'}});
knex.schema.createTable('geostuff', function(table) {
table.increments('id').primary();
table.float('lat', 14, 10).notNullable();
table.float('lng', 14, 10).notNullable();
}).then(function() {
console.dir('table created');
}).catch(function(err) {
console.log('table not created');
console.dir(err);
});
请注意,精度说明符不受广泛支持。 PostgreSQL支持float(precision)
,但SQLite3(来自示例)不支持(更好的是:不关心)。幸运的是,knex.js隐藏了那些特质。
答案 1 :(得分:0)
为了存储地理位置,我使用了双精度数据类型,为此,我的迁移保持如下状态:
exports.up = function(knex, Promise) {
return knex.schema.createTable('route', table => {
table.increments('id').primary()
table.specificType('latitue', 'double precision').notNull()
table.specificType('longitude', 'double precision').notNull()
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable('route')
};