2013-03-15 146 views
0

這是,我希望,可能很明顯,但我找不到一個我認爲可以解決我的問題的示例。Grails使用主鍵和外鍵顯示兩個表中的值

我有一個SQL數據庫,我不能修改,它內有兩個表,與主/外鍵鏈接(分別是test_scenario和test_exec_queue,所以test_scenario中的PK值可以在test_exec_queue中多次顯示),當我顯示屏幕上的數據我希望它,而不是顯示來自test_exec_queue的FK值我希望它使用它從test_scenario表中獲取testScenarioName並顯示它。

到目前爲止,我的課程看起來像這樣,但是我不知道要做什麼來完成上述邏輯,還是要在其他地方做這個?在控制器中?任何幫助表示讚賞

class TestExecQueue { 

    static constraints = { 
     testscenarioid(blank:false, editable:false) 
     myPriority(inList:[0,1,2,3,4], blank:false) 
     myState(inList:["READY"], blank:false) 
    } 

    static mapping = { 
     table "test_exec_queue" 
     version false 
     columns{ 

      id column:"test_exec_queue_id" 
      testscenarioid column:"test_scenario_id" 
      myPriority column:"Priority" 
      myState column:"State" 
     } 
    } 

    Integer testscenarioid 
    Integer myPriority 
    String myState 
} 

回答

0

您需要創建該test_scenario表映射除了已經實施的TestExecQueue類的類。

在你TestExecQueue類,你會鏈接到場景的類,而不是一個整數字段:

class TestExecQueue { 
    static mapping = { 
     scenario column:'test_scenario_id' 
    } 

    TestScenario scenario 
} 

注:這是映射關係的一個例子,你應該檢查Domain Modeling section of the Grails Documentation爲其他選項。

這些類的顯示完全依賴於您的控制器和視圖,並且您需要更詳細的闡述來清晰地回答。一種選擇是在將要打印的類上設置public toString()方法。

+0

謝謝。爲了顯示的目的,我希望它做的是從test_exec_queue表中獲取test_scenario_id值,轉到test_scenario表並查找等效的test_scenario_id,獲取testScenarioName值並顯示該值而不是值(即不是顯示test_scenario_id值) 2存儲在test_exec_queue表中,我希望它顯示「test 001」,它是test_scenario表中存儲的testScenarioName值,它具有匹配的test_scenario_id值,兩個表都有一個名爲test_scenario_id的字段)。 – MorkPork 2013-03-15 16:47:52

+0

因此,我已經添加了上面建議的東西,並且有些東西可以工作,但是我的視圖現在顯示「myframework.TestScenario:1」而不是實際值,任何想法? :/ – MorkPork 2013-03-15 22:22:41

+0

這是GORM域類的默認'toString()'實現。在'TestScenario'中覆蓋它以顯示所需的名稱字段。 – codelark 2013-03-15 22:24:15