簡體   English   中英

如何在hasura中為特定模式執行graphql查詢?

[英]How to execute graphql query for a specific schema in hasura?

從下面的屏幕截圖中可以看出,名為default的當前項目數據庫 (postgresql) 具有這 4 個架構 - public、appcompany1、appcompany2 和 appcompany3。

哈蘇拉控制台

它們共享一些公共表。 現在,當我想為客戶獲取數據時,我會寫一個這樣的查詢:

query getCustomerList {
    customer {
        customer_id
        ...
        ...
    }
}

它從公共模式中獲取所需的數據。

但是根據要求,根據前端的用戶交互,將為 appcompanyN(N=1,2,3,...,任何正整數)執行該查詢。 我如何實現這個目標?

注意:每當用戶創建新公司時,都會為該公司創建一個新架構。 所以模式的總數不限於 4。

我懷疑你看到了一個實際上並不存在的問題。

一切都比看起來簡單得多。

A. 那些桌子在哪里?

有很多模式在它們內部具有相同(或幾乎相同)的對象。

所有表都在 hasura 中注冊。

Hasura 無法注冊同名的不同表,因此默認名稱將為 [schema_name]_[table_name] ( public除外)

所以表customer將被注冊為:

  • customer (來自public
  • appcompany1_customer
  • appcompany2_customer
  • appcompany3_customer

可以使用“自定義 GraphQL 根字段”在 GraphQL 模式中自定義實體名稱。

B、問題

但是根據要求,根據前端的用戶交互,將為 appcompanyN(N=1,2,3,...,任何正整數)執行該查詢。 我如何實現這個目標?

有相同的對象,僅在帶有模式名稱的前綴上有所不同。

所以解決方案是微不足道的

1.動態GraphQL查詢

應用程序存儲 GraphQL 查詢的模板,並在請求之前用真實的模式名稱替換前綴。

例如

query getCustomerList{
   [schema]_customer{
   }
}

appcompany1appcompany2appcompanyZ替換[schema]並執行。

2.所有數據的SQL視圖

如果表 100% 相同,則可以創建一個 sql 視圖,如下所示:

CREATE VIEW ALL_CUSTOMERS
AS
SELECT 'public' as schema,* FROM public.customer
UNION ALL 
SELECT 'appcompany1' as schema,* FROM appcompany1.customer
UNION ALL
SELECT 'appcompany2' as schema,* FROM appcompany2.customer
UNION ALL
....
SELECT `appcompanyZ',* FROM appcompanyZ.customer

這樣:不需要動態查詢,不需要注冊所有模式中的所有對象。

您只需要使用組合數據注冊視圖並使用一個查詢

query{
query getCustomerList($schema: string) {
   all_customer(where: {schema: {_eq: $schema}}){
     customer_id
   }
}

關於這兩種解決方案:很難稱它們為優雅。

我自己都不喜歡他們兩個;)

因此,請自行決定哪種更適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM