【发布时间】:2016-04-05 08:01:59
【问题描述】:
我正在尝试在 Slick 3.1.1 中执行多个连接。我想要达到的结果是这样的:
SELECT * FROM customer LEFT JOIN customer_address ON customer.id = customer_address.customer_id LEFT JOIN address ON customer_address.address_id = address.id
我尝试了以下方法:
val query = for {
c <- Customer
ca <- CustomerAddress if ca.customerId === c.id
a <- Address if a.id === ca.addressId
} yield (c, a)
这里的问题是,如果客户没有地址,那么它就不会出现,这是有道理的。
然后我尝试了这个:
val query2 = for {
(c, ca, a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id)
} yield (c, a)
这里的问题是我在_._2.addressId 上收到错误,因为_._2 是Rep 对象。
确切的错误:
Error:(21, 110) value addressId is not a member of slick.lifted.Rep[Option[Models.Tables.CustomerAddress]]
(c, ca, a) <- (Customer joinLeft CustomerAddress on (_.id === _.customerId)) joinLeft Address on (_._2.addressId === _.id)
自动生成的 Slick Tables 类: http://pastebin.com/e4M3cGU8
如何使用 Slick 获得我想要的结果?
【问题讨论】:
-
您能补充一下您收到的错误吗?