2015-02-07 92 views
1

我正在接收來自POST的參數,並基於這些參數是否存在我想更改數據存儲區查詢。這裏是一個例子,我們可能會或可能不會從郵件中收到「標題」變量。如果確實存在,我想將它作爲過濾器包含在查詢中:如何根據條件向數據存儲區查詢添加過濾器

q := datastore.NewQuery("book"). 
    Filter("author =", "DB"). 
    if title != nil {Filter("title =",title).} 
    Order("author") 

有什麼建議嗎?

回答

1

如果參數存在,可以在查詢上另外調用另一個Query.Filter()方法。只要確保存儲返回值,因爲它可能是一個不同的派生查詢。
原因是所有查詢構建器/修飾符方法都會返回可用於鏈接多個操作的派生查詢。儘管您不必一次就完成所有工作,但您可以存儲中間結果查詢並從那裏繼續「工作」(例如添加新過濾器)。請記住總是存儲返回值,並且必須使用最後一種方法返回的Query

解決方案(候選人):

q := datastore.NewQuery("book").Filter("author =", "DB") 
if title != nil { 
    q = q.Filter("title =", title) 
} 
q = q.Order("author") 

注:

你沒有提到它,但我相信titlestringstring類型的變量不能具有nil值。一個string的零值是空字符串""所以用它來比較/測試:

q := datastore.NewQuery("book").Filter("author =", "DB") 
if title != "" { 
    q = q.Filter("title =", title) 
} 
q = q.Order("author") 
+0

優秀這正是我一直在尋找。 – 2015-02-07 14:27:11