2016-05-23 35 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

相關問題