2012-02-26 53 views
0

試圖簡單地使用找到所有運行域對象的查詢,它不是作爲我希望:的Grails的findAll與像值

searchResults = Contact.findAll("from Contact as c where c.company=${params.company.id} and c.firstName = '%${nameSearch}%' or c.lastName = '%${nameSearch}%' ") 

我想找到具有名字在公司內所有的人或姓氏與輸入的搜索類似(params.search存儲到nameSearch變量中)。如果我將第一個或最後一個值更改爲特定名稱「Tim」或「Johnson」,它就可以工作。

我對變量或「like」引用做了什麼不正確的操作?我認爲%符號基本上是搜索條件中的*符號?

我已經試過了2.0.0形式的搜索:

 searchResults = Contact.findAll{ 
      company == params.company.id 
      firstName == '%' + nameSearch + '%' 
      lastName == '%' + nameSearch + '%' 
     } 

但是,這也不能工作。感謝您的所有幫助

回答

7

這給一試:

​​

如果您不想檢索Company例如,你可以一個company { }塊中使用它來代替idEq()


有幾件事情(也許更多)是錯誤的與您的HQL嘗試:

  • company條件進行比較的對象(c.company)價值(params.company.id
  • 您的ID需要正確分組布爾邏輯,即(company AND (first OR last)),而不是(company AND first OR last)
  • 您應該一直使用like而不是=,例如firstName like '%something%'

As a matter of security你真的,真的不應該與價值觀直列建立你的HQL語句。您應該使用命名參數。查看​​中的一些中間示例。

+0

感謝羅布 - 這正是我使用的。快速通過證明是我所需要的,但是我擔心我的域名條目很多。然而,有一件事我注意到並且無法弄清楚我的生活是如何處理兩個不同的場景?我用ilike(lastname)或ilike(firstName)創建了標準,但沒有運氣。只需一次比較就可以正常工作。 – user82302124 2012-02-27 20:54:45

+0

沒關係 - 我很好。我使用基本的findBy與較不復雜的查詢。再次感謝Rob爲我介紹這個查詢代碼! – user82302124 2012-02-27 21:37:24