【问题标题】:Rendering joinTables as a list in Grails将 joinTables 渲染为 Grails 中的列表
【发布时间】:2011-06-02 05:43:38
【问题描述】:

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

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 视图中做什么才能使加入列表发生(并且仍然使用分页)?

【问题讨论】:

  • 关系是 1:M 还是 M:M?从例子中看不清楚。
  • 这是一个 1:M 的关系。对不起,我没有说清楚。感谢您的帮助!
  • 您的意思可能是 M:M - 看起来 Car 有很多 Drivers,Driver 可以驱动很多 Cars - 这就是连接表毕竟存在的原因。跨度>

标签: grails view controller gsp jointable


【解决方案1】:

如果Driver 只能有一个Car,您需要一个Driver 来引用Car,并且只需为list 渲染脚手架Driver

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

如果Driver 可以有多个Cars,并且您不想将Car_Driver 表拉入可见域模型(它没有自己的域含义),请使用类似脚手架的list 操作SQL 查询结果为cardriverInstancesList。喜欢这里:SQL/Database Views in Grails

只需检查resultPagedResultList。如果没有,您可以手动创建一个PagedResultList,它很容易由ListtotalCount 构建,您可以使用SQL 找到它们。

【讨论】:

  • 感谢SQL/Database Views in Grails 的提示。这会很好地工作。不过,我还有另一个问题。在我的示例中,我有多辆汽车,每辆汽车可以有多个司机 (1:m)。我如何将 Car_Driver 连接到可见域模型中?这听起来就像我应该做的那样。
  • 我的意思是创建CarDriver 域类,将其映射到该表并明确使用它。 1. 我不认为在域模型中有这个连接表是一个好主意,因为它违反了 DDD 范式——它本身没有物理意义。连接表是关系数据模型限制的纯粹产物。 2. 另外,它会让你没有像Car.addToDrivers() 这样的Grails 方法——尽管你可以自己实现这些方法。 3. 不过,这一切都取决于您的要求,可能还不错。
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多