[英]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。
我懷疑你看到了一個實際上並不存在的問題。
一切都比看起來簡單得多。
有很多模式在它們內部具有相同(或幾乎相同)的對象。
所有表都在 hasura 中注冊。
Hasura 無法注冊同名的不同表,因此默認名稱將為 [schema_name]_[table_name] ( public
除外)
所以表customer
將被注冊為:
customer
(來自public
)appcompany1_customer
appcompany2_customer
appcompany3_customer
可以使用“自定義 GraphQL 根字段”在 GraphQL 模式中自定義實體名稱。
但是根據要求,根據前端的用戶交互,將為 appcompanyN(N=1,2,3,...,任何正整數)執行該查詢。 我如何實現這個目標?
有相同的對象,僅在帶有模式名稱的前綴上有所不同。
所以解決方案是微不足道的
應用程序存儲 GraphQL 查詢的模板,並在請求之前用真實的模式名稱替換前綴。
例如
query getCustomerList{
[schema]_customer{
}
}
用appcompany1
、 appcompany2
、 appcompanyZ
替換[schema]
並執行。
如果表 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.