我有一个product
表和一个line_items
表。
通过联接表product
product_line_items
has_and_belongs_to_many line_items。
如何进行查询,以便将所有不在line_item ID中显示的产品退回给我?
我正在思考以下几点:
Product.joins(:line_items).where.not(line_items: {id: 6})
但这让我没有任何行,因为它正在进行内部联接,实际上我的产品现在都不在任何订单项中......
有没有一种简单的方法可以写这个或者我是否必须进行左连接查询?
所以我想找到所有没有出现在line_item ID 6中的产品(包括根本没有出现在订单项中的产品!)。是否有一个我没有发现的简单查询语法?
谢谢,很多。
答案 0 :(得分:0)
我不确定你为什么要这样做,因为line_items_products的ID对你来说没用。
但你可以在活跃记录中这样做:
Product.joins(line_items).where("line_items_products.id <> ?", 6)
答案 1 :(得分:0)
好的,所以对于任何有兴趣的人我最终都会这样做:
Product.where.not(id: line_item_6.products.map(&:id))
是line_item_6
是对ID为6的line_item
模型的引用。