如何使用loopback.js将具有特殊类型的模型迁移到postgresql

问题描述:

automigrate.js能够正常工作并在我的postgres数据库中创建食物表,但“真实”类型映射到我的数据库中的“整数”类型。 我想要将映射到“数组”类型的“过敏原”映射为整数。 错误在哪里?我需要改变什么? 我按照这个this tutorial如何使用loopback.js将具有特殊类型的模型迁移到postgresql

这是我model.js

{ 
    "name": "Food", 
    "base": "PersistedModel", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true, 
     "postgres": { 
     "columnName": "name", 
     "dataType": "CHARACTER VARYING", 
     "dataLength": 50, 
     "dataPrecision": null, 
     "dataScale": null, 
     "nullable": "NO" 
     } 
    }, 
    "carbs": { 
     "type": "number", 
     "dataType": "real", 
     "precision": 10, 
     "scale": 2, 
     "required": true, 
     "postgresql": { 
     "columnName": "carbs", 
     "dataType": "real", 
     "dataLength": null, 
     "dataPrecision": 10, 
     "dataScale": 2, 
     "nullable": "NO" 
     } 
    }, 
    "fats": { 
     "type": "number", 
     "dataType": "REAL", 
     "precision": 10, 
     "scale": 2, 
     "required": true, 
     "postgres": { 
     "columnName": "fats", 
     "dataType": "REAL", 
     "dataLength": 50, 
     "dataPrecision": 10, 
     "dataScale": 2, 
     "nullable": "NO" 
     } 
    }, 
    "proteins": { 
     "type": "number", 
     "dataType": "REAL", 
     "precision": 10, 
     "scale": 2, 
     "required": true, 
     "postgres": { 
     "columnName": "proteins", 
     "dataType": "REAL", 
     "dataLength": 50, 
     "dataPrecision": 10, 
     "dataScale": 2, 
     "nullable": "NO" 
     } 
    }, 
    "allergens": { 
     "type": ["object"] 
    }, 
    "style": { 
     "type": "object", 
     "postgres": { 
     "columnName": "style", 
     "dataType": "CHARACTER VARYING", 
     "dataLength": 50, 
     "dataPrecision": null, 
     "dataScale": null, 
     "nullable": "NO" 
     } 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 

,这是我automigrate.js

'use strict'; 

var app = require('../server'); 
var dataSource = app.dataSources.softNutritionDB; 

dataSource.automigrate('Food', function(err) { 
    if (err) throw err; 
    dataSource.disconnect(); 
}); 

变化

"allergens": { 
    "type": ["object"] 
}, 

到,

"allergens": { 
    "type": "object" 
    "postgres": { 
     "dataType": "json" 
    } 
}, 

我将创建一个json列。

这应该工作,但理想情况下,根据规范化规则,您应该创建另一个表来存储过敏原映射。

+0

谢谢,昨天我为过敏原创建了一个不同的表,它工作。你是否也有解决方案的真正价值? – michoprogrammer

+0

真实价值是什么意思? –

+0

我的意思是实数(例如3.45,10.23,733.124,...)。看起来用实数迁移模型的唯一方法是迁移一个数字,然后在postgres中修改表。 – michoprogrammer