是否无法在Rhomobile中执行左联接?
我有模型PriceGroups,PriceLookup,它们有一个一元关系(即每个PriceGroup都有许多PriceLookup记录)。
我需要做一个简单的SQL左联接,这样我就可以从PriceGroups表中获得所需的信息
SELECT * FROM PriceLookup
LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code
我已将此添加到price_lookup模型中:
belongs_to :price_group_code, 'PriceGroups'
以下是我在Rhomobile 中尝试的内容
PriceLookup.find_by_sql("SELECT *
FROM PriceLookup
LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")
但我得到错误:
Error: could not prepare statement: 1; Message: no such table: PriceGroups
我知道我可以自己做两个选择并加入它们,但这是一种非常糟糕的方法
您需要将RhoMobile模型创建为FixedSchema,而不是使用默认的PropertyBags。
否则,您在SQLite中没有真正的表,但您使用的是实现键值存储的特殊objectValues表:http://docs.rhomobile.com/rhodes/rhom#fixed-模式
示例:
dbPT = ::Rho::RHO.get_src_db('PriceLookup')
sql = "SELECT * FROM PriceLookup LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code"
lines = dbPT.execute_sql(sql)
如果表PriceGroups尚未初始化(创建),则可能发生这种情况。表是在加载模型类时创建的,如果它们不存在的话。对于您的情况,只需调用模型类,这将加载它并在必要时创建表。
PriceGroups; #Only for create the table
PriceLookup.find_by_sql("SELECT * FROM PriceLookup LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")