【发布时间】:2018-04-23 22:28:24
【问题描述】:
我正在尝试在遗留数据库(具有现有数据和表结构)上在 Amber 中构建一个 JOIN 查询(使用 Granite ORM),并想知道是否可以自定义查询的 SELECT FROM 部分以支持交叉-table JOIN。
这是名为vehicles 的表的当前表结构:
-----------------------------------------------| vehicleid | year | makeid | modelid |-----------------------------------------------| 1 | 1999 | 54 | 65 || 2 | 2000 | 55 | 72 || ... | ... | ... | ... |-----------------------------------------------
等等。
其中makeid 和modelid 是对makes 和models 表的外键引用。在这些表中是命名列(分别为makename 和modelname)。
我正在尝试生成一个 JOIN 查询来提取名称:
SELECT vehicle.yearid, make.makename AS make, model.modelname AS model FROM vehicles JOIN....
(剪掉 JOIN 细节)。
这样当查询返回时,我有一个 Vehicle 对象并且可以访问:
Vehicle.yearid,
Vehicle.make,和
Vehicle.model
这可以使用 Granite 吗?
我可以使用原始 SQL 生成查询的 JOIN 部分,但我不知道如何自定义 SELECT 部分中的表和列名。我试过这样创建一个对象:
class Vehicle < Granite::ORM::Base
adapter pg
primary vehicleid : Int32
field yearid : Int32
field make : String
field model : String
end
但 Granite 正在生成以下 SQL:
SELECT vehicle.yearid, vehicle.make, vehicle.model FROM vehicle JOIN...
这会引发错误,因为 vehicle.make 和 vehicle.model 实际上并不存在。
我想要的是这个 SQL:
SELECT vehicle.yearid, make.makename AS make, model.modelname AS model FROM vehicles JOIN....
有没有办法让它工作?
【问题讨论】:
标签: crystal-lang amber-framework