2013-03-15 99 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