mysql - 多个连接轨道混乱
问题描述
我有以下
**User** model
has_many orders class_name: "Order", foreign_key: "buyer_id"
**Order** model
has_many :items, class_name: "OrderItem"
**OrderItem** model
belongs_to :orderable, -> { with_deleted }, polymorphic: true
所以一个User有很多Orders,每个Order包含很多OrderItems,并且他们有一个与 product_id 相关的“orderable_id”
我正在尝试返回未购买特定商品的用户的用户 ID 列表
目前,我有
User.joins(:orders => :items).where("orders.status = 'success'").where("order_items.orderable_id != ?", product_id).pluck(:id)
不幸的是,它还不够深入。
如果 OrderItem 包含有问题的 product_id,它会成功丢弃该 OrderItem,但如果任何 OrderItem 包含有问题的 product_id,我需要完全丢弃用户
只是有点过头了
解决方案
你可以尝试这样的事情:
user_who_purchased_ids = User.joins(orders: :items).where("orders.status = 'success'").where("order_items.orderable_id = ?", product_id).pluck(&:id)
users_who_did_not_purchase = User.where('id not in ?', user_who_purchased_ids)
推荐阅读
- packer - 如何在打包程序中为脚本调用提供多行字符串
- flutter - 等式比较中的Flutter String问题
- r - 如何使用 strsplit() 重新格式化列
- asp.net-core - 如何在 Webforms 应用程序和 AspNetCore 子应用程序之间共享 HttpContext.Identity
- pine-script - pinescript 策略问题:如何在下一次开盘时在某个级别发布限价单?
- angular - 带有查询参数和附加路由的角路由
- python - 尝试执行 != 选项但失败
- javascript - 从 PHP 在 webapp 中注销 Google Oauth
- c++ - 在C ++中将字符串转换为没有科学记数法的double
- java - Java 和 mysql - ResultSet 的问题