2011-06-02 23 views
0

我有两个域类:Car和Driver。我想制作一个gsp视图,在一个列表中显示汽车和驾驶员信息,该列表看起来或多或少是一个默认的脚手架列表。例如:将连接表呈现为Grails中的列表

Make Model Driver Age 
------------------------ 
Chevy Nova Joe  20 
Chevy Nova Mike 30 
Chevy Nova Sally 40 

这里的域类:

class Car { 
    String make 
    String model 

    static constraints = { } 
    static hasMany = [ drivers : Driver ] 

    static mapping = { 
    drivers joinTable: [name: 'Car_Driver', column: 'DRIVER_ID', key: 'CAR_ID'] 
    } 
} 

class Driver { 
    String name 
    int age 

    static constraints = { } 
} 

打个车,并给它一些司机:

def car = new Car(make: 'Chevy', model: 'Nova') 
def driver1 = new Driver(name: 'Joe', age: 20) 
def driver2 = new Driver(name: 'Mike', age: 30) 
def driver3 = new Driver(name: 'Sally', age: 40) 

car.addToDrivers(driver1) 
car.addToDrivers(driver2) 
car.addToDrivers(driver3) 
car.save() 

什么我需要在我CarController做的和/或gsp视图使联接列表发生(并仍然与分页工作)?

+0

是关系1:M还是M:M?这个例子并不清楚。 – 2011-06-02 10:06:20

+0

这是1:M的关系。对不起,我没有说清楚。感谢帮助! – frgauthier 2011-06-02 13:49:45

+0

你可能是指M:M--看起来像一个'Car'有很多'Driver's,'Driver'可以驱动很多'Car's - 这就是为什么连接表存在的原因。 – 2011-06-02 20:59:51

回答

1

如果Driver只能有一个Car,你需要一个Driver参考Car,只是渲染脚手架listDriver

要调整列表列,你必须grails generate-views

如果Driver可以有很多Cars,你不想拉Car_Driver表为可见光领域模型(它没有自己的域名含义),使脚手架般list行动使用SQL查询结果作为cardriverInstancesList。像这样:SQL/Database Views in Grails

只需检查result是否为PagedResultList。如果没有,您可以手动创建PagedResultList,它可以很容易地从ListtotalCount构建而成,您可以通过SQL找到它。

+0

感谢[Grails中的SQL /数据库视图](http://stackoverflow.com/questions/425294/sql-database-views-in-grails)提示。这将很好地工作。我确实有另一个问题。在我的例子中,我有多辆车,每辆车可以有多个司机(1米)。我将如何将Car_Driver连接表拉成可见域模型?这听起来很像我想要做的事情。 – frgauthier 2011-06-02 13:44:34

+0

我的意思是创建'CarDriver'域类,将它映射到该表并明确使用它。 1.我不认为在域模型中使用这个连接表是一个好主意,因为它违反了DDD范式 - 它本身没有物理意义。连接表是纯粹的关系数据模型限制的人为因素。 2.另外,它会让你没有像Car.addToDrivers()这样的Grails方法 - 尽管你可以自己实现这些方法。仍然,这一切都取决于你的要求,可能并不是那么糟糕。 – 2011-06-02 21:03:31