You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多层嵌套关联查询:获取卖家用户的所有Admin::Accbook数据

解决方案:获取指定卖家用户的所有Accbook数据

我来帮你搞定这个关联查询的问题!你已经完成了一部分关联,只需要把User的关联补全,再加上过滤条件就可以了。

方法一:完整关联所有表(和你提供的SQL完全匹配)

你需要在joins里嵌套到seller关联,因为Offer属于seller(也就是User模型),所以嵌套结构应该是purchase: { offer: :seller },然后通过users表的id来过滤:

# 替换成你实际要查询的用户ID
target_seller_id = 1

Admin::Accbook.joins(purchase: { offer: :seller })
              .where(users: { id: target_seller_id })

这段代码会生成和你提供的完全等价的SQL,自动完成所有INNER JOIN,并且过滤出卖家ID匹配的所有Accbook记录。

方法二:简化查询(更高效)

因为Offer表本身就有seller_id字段,我们可以直接通过这个字段过滤,不需要额外关联users表,这样查询会更高效:

target_seller_id = 1

Admin::Accbook.joins(purchase: :offer)
              .where(offers: { seller_id: target_seller_id })

这个写法生成的SQL会少一次JOIN,但结果和你要的完全一致——毕竟offers.seller_id就是对应用户的ID,直接过滤它就足够了。

验证生成的SQL

你可以通过调用.to_sql来查看生成的SQL语句,确保逻辑正确:

puts Admin::Accbook.joins(purchase: { offer: :seller }).where(users: { id: 1 }).to_sql

输出的SQL会和你提供的示例完全匹配。

内容的提问来源于stack exchange,提问作者Eduardo Álvarez

火山引擎 最新活动