2016-05-23 36 views
0

基本上是什么标题问。我想知道是否有可能在数据源无知的Loopback中创建自定义视图模型?如何在Loopback中创建数据视图模型?

我目前的流程是在MySQL中创建一个视图,然后在Loopback中构建覆盖视图的模型,但是我最近意识到如果我们决定迁移到不同的后端或以某种方式更改数据源,我们必须弄清楚如何重新创建视图。

谷歌在这方面的搜索显示bupkis,所以我想我会把它扔出来看看是否有人对这个话题有所了解。

在此先感谢!

+0

最终,正在寻找一些缓存系统? – Overdrivr

+0

最终,我正在寻找生成一些非常复杂的报告,从多个不同的模型中提取信息。我可以每次生成自定义查询,但是我发现如果我在MySQL中创建视图,访问速度会更快。我很好奇,如果可以将视图生成摘要转换为Loopback,以便在未来实现更好的迁移/更易于维护, – Jonathan

回答

0

在Loopback中使用视图效果很好。只要将视图看作是一个表,Loopback就会以同样的方式对待它。事实上,如果你愿意,你可以对视图执行一些写操作。假设您已经创建的视图在SQL这里有一个片段从现有的表或视图中创建环回终点:

/** 
* Creates a REST endpoint using the persistedModel. 
* @function createPersistedModelApi 
*/ 
function createPersistedModelApi(app, dataSourceName: string, tablename: string, callback) { 

    let eventInfo: Type.Event 
    let ds = app.datasources[dataSourceName]; 

    ds.discoverSchema(tablename, null, function(err, schema) { 

     if (!err) { 

      // Set the key field.     
      schema.properties.rowid.id = true; 

      // Get a list of the fields 
      var fields = Object.keys(schema.properties); 

      // Set some properties on all fields. 
      fields.forEach(function(field) { 
       schema.properties[field].required = false; 
       schema.properties[field].nullable = true; 
      }); 

      // Create the model. 
      ds.createModel(tablename, 
       schema.properties, 
       { 
        plural: tablename, 
        core: true, 
        base: "PersistedModel", 
        idInjection: false 
       } 
      ) 

      // Get an instance of the model. 
      let model = ds.getModel(tablename); 

      // Make the model public with a REST API. 
      app.model(model, { dataSource: dataSourceName, public: true }); 

     // Error 
     } else { 
      .... 
     } 

     // Return 
     ........ 

    }); 
} 
+0

感谢您分享您的想法。我实际上已经能够创建在MySQL视图之上工作的模型,并且它们的功能与您所描述的完全相同,并且非常棒。我的问题是 - 是否可以创建视图,使其仅存在于Loopback中,并且在其后面的M​​ySQL中没有实际的视图。那有意义吗? – Jonathan

+0

你可以使用Loopback模型关系。或者,您可以对SQL进行硬编码或从数据库中提取SQL,并从Loopback端点启动的Node内执行。 https://strongloop.com/strongblog/defining-and-mapping-data-relations-with-loopback-connected-models/ – ASA2

+0

另一种选择是使用类似knex.js的东西。它允许您以独立于数据库的方式对SQL进行编码,从而生成一个动态生成的“视图”。 – ASA2

相关问题