2013-03-15 1 views
0

Это, я надеюсь, вероятно вполне очевидно, но я не могу найти пример, который, как мне кажется, отвечает на мою проблему.Грааля, отображающая значения из двух таблиц с использованием первичных и внешних ключей

У меня есть база данных SQL, которую я не могу изменить, и внутри нее две таблицы, связанные с первичными/внешними ключами (test_scenario и test_exec_queue соответственно, поэтому значение PK из test_scenario может отображаться многократно в test_exec_queue), и когда я показываю данные на экране, на котором я хочу, вместо отображения значения FK из test_exec_queue. Я хочу, чтобы он использовал это, чтобы получить имя testScenarioName из таблицы test_scenario и отобразить это вместо этого.

До сих пор мой класс выглядит так, но я понятия не имею, что делать в логике выше, или я делаю это где-то еще? В контроллере? Любая помощь приветствуется

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_scenario_id из таблицы test_exec_queue, перейти в таблицу test_scenario и найти эквивалент test_scenario_id, получить значение testScenarioName и отобразить это вместо значения (т. Е. Вместо того, чтобы показывать значение test_scenario_id 2, поскольку он хранится в таблице test_exec_queue, я хочу, чтобы он показывал «тест 001», который является значением testScenarioName, хранящимся в таблице test_scenario, которое имеет соответствующее значение test_scenario_id, обе таблицы имеют поле test_scenario_id). – MorkPork

+0

Итак, я добавил материал, как было предложено выше, и что-то работает, однако в моем представлении теперь отображается «myframework.TestScenario: 1», а не фактическое значение, любые идеи? :/ – MorkPork

+0

Это реализация 'toString()' по умолчанию для класса домена GORM. Переопределите его внутри 'TestScenario', чтобы отобразить поле имени, которое вы хотите. – codelark